【VB6|第23期】原来Jet.OLEDB也可以读取新版.xlsx的Excel文件

news2024/11/25 22:49:03

日期:2023年8月11日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


在这里插入图片描述


文章目录

  • 一、前言
  • 二、使用要求
  • 三、Jet.OLEDB读取旧版.xls格式的Excel
  • 四、Jet.OLEDB读取新版.xlsx格式的Excel
    • (4-1)前期绑定(静态绑定)
    • (4-2) 后期绑定(动态绑定)
    • (4-3)完整示例
  • 五、结束语


一、前言

上期文章《【VB6|第22期】用SQL的方式读取Excel数据》 介绍了通过 第三方库(Jet.OLEDB 读取 Excel 数据,读取了旧版 .xls 格式的 Excel 文件,对于新版我们留下了一个伏笔。

或许有人会建议考虑使用 Microsoft ACE OLEDB 提供程序来读取新版 .xlsx 格式的 Excel 文件。但是安装额外的程序,然后又因为 Excel 程序位数与额外程序位数等等兼容性问题,再调试来调试去的,显然对于用户来说不太友好,而且个人感觉很麻烦,所以本文不对此话题进行展开讨论。

本文主要讲解如何用 Jet.OLEDB 来读取新版 .xlsx 格式的 Excel 文件。话不多说,直接上教程。

二、使用要求

  • 安装了 MS Office 软件
  • 安装了最新版 WSP Office 软件

满足上述其中一条,我们就就有了实现 Jet.OLEDB 读取新版 .xlsx 格式的 Excel 文件 的基础。

三、Jet.OLEDB读取旧版.xls格式的Excel

在这里插入图片描述
在这里插入图片描述

示例代码:

Option Explicit
Private Sub CmdJet_Click()
On Error Resume Next
'函数说明:使用第三方库(Jet.OLEDB)读取Excel数据(.xls格式)
'创建作者:Commas
'创建时间:2023-08-06
'修改时间:
'------传参说明------
'------传参说明------
    'Excel文件的路径
    Dim sXLPath As String
    
    'sXLPath = App.Path & "\example.xlsx"
    sXLPath = App.Path & "\example.xls"

    ' NO1:前期绑定(静态绑定)
    ' 需要添加对Microsoft ActiveX Data Objects xx.x Library的引用(版本号根据ADO版本变化)
    Dim CN As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    ' NO2:后期绑定(动态绑定)
'''    Dim CN As Object 'New ADODB.Connection
'''    Dim RS As Object 'New ADODB.Recordset
'''    Set CN = CreateObject("adodb.connection")
'''    Set RS = CreateObject("adodb.recordset")
    
    Dim CNStr As String
    Dim sqlQuery As String
    
    ' 连接到Excel文件
    
    CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 8.0;HDR=Yes;"";"
    'CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 12.0;HDR=Yes;"";"
    
    CNStr = Replace(CNStr, "{path}", sXLPath)
    CN.Open CNStr
    
    ' 构造SQL查询语句
    sqlQuery = "SELECT * FROM [Sheet1$A1:C5];"
    
    ' 执行查询并将结果保存到记录集(Recordset)
    RS.Open sqlQuery, CN
    
    ' 将数据读取到数组中
    Dim aryData() As Variant
    aryData = RS.GetRows
    
    RS.Close
    CN.Close
    
    '输出,获取二维数组的行数和列数
    Dim rows As Long, cols As Long
    rows = UBound(aryData, 1) + 1  ' 行数
    cols = UBound(aryData, 2) + 1 ' 列数
    
    ' 遍历二维数组
    Dim i As Long, j As Long
    For i = 0 To rows - 1
        For j = 0 To cols - 1
            ' 访问二维数组中的元素
            Debug.Print "aryData(" & i & ", " & j & ") = " & aryData(i, j)
        Next j
    Next i
End Sub

返回结果:

aryData(0, 0) = 张三
aryData(0, 1) = 李小龙
aryData(0, 2) = 王五
aryData(0, 3) = 赵六
aryData(1, 0) = 技术部
aryData(1, 1) = 技术部
aryData(1, 2) = 市场部
aryData(1, 3) = 销售部
aryData(2, 0) = 18
aryData(2, 1) = 19
aryData(2, 2) = 20
aryData(2, 3) = 21

四、Jet.OLEDB读取新版.xlsx格式的Excel

实现的操作流程很简单,我们只需要在 三、Jet.OLEDB读取旧版.xls格式的Excel 的基础上,加上一个COM组件打开Excel就可以了。COM组件打开Excel 之前文章详细讨论过,这里就不再赘述,不清楚的小伙伴可以点击《【VB6|第19期】vb6通过COM组件操作Excel》查看,了解的小伙伴可以直接逃过看下文。

(4-1)前期绑定(静态绑定)

需要在工程引入中添加 Microsoft Excel xx.0 Object Library 的引用。

在这里插入图片描述

Dim XlApp As New Excel.Application
Dim XlBook As New Excel.Workbook

XlApp.Visible = False
Set XlBook = XlApp.Workbooks.Open(sXLPath)

'嵌套 三、Jet.OLEDB读取旧版.xls格式的Excel 的代码
'实现SQL读取.xlsx和.xls格式的Excel

XlBook.Close
XlApp.Quit

(4-2) 后期绑定(动态绑定)

Dim XlApp As Object 'New Excel.Application
Dim XlBook As Object 'New Excel.Workbook

Set XlApp = VBA.CreateObject("Excel.Application")
XlApp.Visible = False
Set XlBook = XlApp.Workbooks.Open(sXLPath)

'嵌套 三、Jet.OLEDB读取旧版.xls格式的Excel 的代码
'实现SQL读取.xlsx和.xls格式的Excel

XlBook.Close
XlApp.Quit

(4-3)完整示例

在这里插入图片描述
在这里插入图片描述
示例代码:

Private Sub CmdJetXLSX_Click()
On Error Resume Next
'函数说明:使用第三方库(Jet.OLEDB)读取Excel数据(.xls格式和.xlsx格式)
'创建作者:Commas
'创建时间:2023-08-08
'修改时间:
'------传参说明------
'------传参说明------

    'Excel文件的路径
    Dim sXLPath As String
    
    sXLPath = App.Path & "\example.xlsx"
    'sXLPath = App.Path & "\example.xls"
    

    '======加上这个,就可以读取.xlsx格式的Excel文件啦======
    ' NO1:前期绑定(静态绑定)
'''    Dim XlApp As New Excel.Application
'''    Dim XlBook As New Excel.Workbook
    
    ' NO2:后期绑定(动态绑定)
    Dim XlApp As Object 'New Excel.Application
    Dim XlBook As Object 'New Excel.Workbook
    
    Set XlApp = VBA.CreateObject("Excel.Application")
    XlApp.Visible = False
    Set XlBook = XlApp.Workbooks.Open(sXLPath)
    '======加上这个,就可以读取.xlsx格式的Excel文件啦======


    ' NO1:前期绑定(静态绑定)
    ' 需要添加对Microsoft ActiveX Data Objects xx.x Library的引用(版本号根据ADO版本变化)
    Dim CN As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    ' NO2:后期绑定(动态绑定)
'''    Dim CN As Object 'New ADODB.Connection
'''    Dim RS As Object 'New ADODB.Recordset
'''    Set CN = CreateObject("adodb.connection")
'''    Set RS = CreateObject("adodb.recordset")
    
    Dim CNStr As String
    Dim sqlQuery As String
    
    ' 连接到Excel文件
    
    CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 8.0;HDR=Yes;"";"
    'CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 12.0;HDR=Yes;"";"
    
    CNStr = Replace(CNStr, "{path}", sXLPath)
    CN.Open CNStr
    
    ' 构造SQL查询语句
    sqlQuery = "SELECT * FROM [Sheet1$A1:C5];"
    
    ' 执行查询并将结果保存到记录集(Recordset)
    RS.Open sqlQuery, CN
    
    ' 将数据读取到数组中
    Dim aryData() As Variant
    aryData = RS.GetRows
    
    RS.Close
    CN.Close
    
    '======加上这个,就可以读取.xlsx格式的Excel文件啦======
    XlBook.Close
    XlApp.Quit
    '======加上这个,就可以读取.xlsx格式的Excel文件啦======
    
    '输出,获取二维数组的行数和列数
    Dim rows As Long, cols As Long
    rows = UBound(aryData, 1) + 1  ' 行数
    cols = UBound(aryData, 2) + 1 ' 列数
    
    ' 遍历二维数组
    Dim i As Long, j As Long
    For i = 0 To rows - 1
        For j = 0 To cols - 1
            ' 访问二维数组中的元素
            Debug.Print "aryData(" & i & ", " & j & ") = " & aryData(i, j)
        Next j
    Next i
End Sub

返回结果:

aryData(0, 0) = 张三
aryData(0, 1) = 李小龙
aryData(0, 2) = 王五
aryData(0, 3) = 赵六
aryData(1, 0) = 技术部
aryData(1, 1) = 技术部
aryData(1, 2) = 市场部
aryData(1, 3) = 销售部
aryData(2, 0) = 18
aryData(2, 1) = 19
aryData(2, 2) = 20
aryData(2, 3) = 21

五、结束语

经测试,用户只要安装 MS Office 或者 新版的 WPS Office,就可以用Jet.OLEDB 正常读取新版 .xlsxExcel 文件的数据啦。
本文也只是浅谈了一下使用教程,对原理感兴趣的小伙伴也可以继续研究微软的相关知识,或者大佬们也可以留言,为我们大家解惑。
编写教程不易,希望各位小伙伴可以给个赞,让更多的小伙伴可以看到,参与话题讨论中来。


参考文章:

  • 《Microsoft OLE DB Provider for Microsoft Jet》

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/132131301

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/865287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 小测试

目录 基础查询 ​ 高级查询 基础查询 现有用户表user数据如下: 1、写出ddl语句创建如上表,插入数据,查询所有数据 #创建表user create table user( id int UNSIGNED auto_increment key , device_id int UNSIGNED, gender varchar…

【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字

盛水最多的容器 (1)暴力解法 算法思路:我们枚举出所有的容器大小,取最大值即可。 容器容积的计算方式: 设两指针 i , j ,分别指向水槽板的最左端以及最右端,此时容器的宽度为 j - i 。由于容器…

七道Android面试题,先来简单热个身

作者:Coffeeee 马上就要到招(tiao)聘(cao)旺季金勾银十了,一批一批的社会精英在寻找自己的下一家的同时,也开始着手为面试做准备,回想起自己这些年,也大大小小经历过不少面试,有被面试过,也有当…

mybatis-plus的逻辑删除的坑

一旦在逻辑字段上加了TableLogic逻辑删除的配置,并且使用mybatis-plus自带的方法时(如果自己用xml写SQL不会出现下面的情况) 查询、修改时会自动排除逻辑删除的数据 当使用mybatis-plus自带的查询方法时,就不用每次查询的时候跟…

构建 LVS-DR 群集、配置nginx负载均衡。

目录 一、基于 CentOS 7 构建 LVS-DR 群集 1、准备四台虚拟机 2、配置负载调度器(192.168.2.130) 3、部署共享存储(192.168.2.133) 4、配置两个Web服务器(192.168.2.131、192.168.2.132) 测试集群 二…

【HCIP】重发布实验

题目: 配置: R1 //配置ip地址 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/0]int g0/0/1 [r1-GigabitEthernet0/0/1]ip add 13.1.1.1 24 [r1-GigabitEthernet0/0/1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24 /…

天马上位在即,将成为iPhoneSE4二级供应商,SE4有望2025年量产

根据知情人士透露,国内OLED面板制造商,如天马,正在积极争取成为苹果iPhone SE 4的AMOLED面板供应商。 苹果面板采购负责人已经在今年上半年访问了中国大陆的主要柔性AMOLED面板制造商之一,这意味着国内一家OLED面板厂商有望成为iP…

哪些人会看作业指导书?作业指导书怎样才能发挥作用?

一般人普遍人为,作业指导书就是给操作人员看的。其实不然,那么哪些人会看作业指导书?大致可以分为: 第一类:新到工作岗位的员工。其中包括新进员工和新转岗位的员工,他们都会在师傅或领班组长的带领指导下,…

MySQL 数据类型总结

整形数据类型 1字节 8bit 2^8256

安灯Andon系统的应用与优势

安灯系统是一款与硬件相结合,实时了解机台与工位状态,让异常的信息得到快速、高效的解决的系统软件,同时记录每次异常报警的种类、响应时间和处理问题用时,提供改善生产管理和人员考核的数据参考,实现透明、快速的生产…

C++实现一键关闭桌面

方法一&#xff1a; C关闭桌面,explorer.exe #include<Windows.h> #include <TlHelp32.h> #include"resource.h" #pragma warning(disable:4996) void taskkill(const char * name) {HANDLE info_handle CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,…

C++ 派生类的拷贝构造函数

当存在类的继承关系时&#xff0c;对于一个类&#xff0c;如果程序员没有编写拷贝构造函数&#xff0c;编译系统会在必要时自动生成一个隐含的拷贝构造函数&#xff0c;这个隐含的拷贝构造函数会自动调用基类的拷贝构造函数&#xff0c;然后对派生类新增的成员对象一一执行拷贝…

更新镜像配置

安装docker Install Docker Desktop on Linux | Docker Documentation 拉取镜像 sudo docker pull reg.docker.xx-inc.com/xxx/xxxx:20220916 基于镜像运行容器 sudo docker run -it reg.docker.xx-inc.com/xx/xxxx:20230317 /bin/bash 修改配置后ctrlp&#xff0c;再ctrlq…

激光切割机的操作中蛙跳技术是什么意思

其实&#xff0c;蛙跳技术就是指在激光切割机运行的过程中&#xff0c;机器换位置的方式。打个比方&#xff0c;你刚刚在这儿把孔1切好了&#xff0c;接下来就得跑到那儿把孔2切了。 在这个过程中&#xff0c;激光切割机就像是一只青蛙&#xff0c;要从一个位置跳到另一个位置。…

#python# #Matplotlib# 常用可视化图形

工作中&#xff0c;我们经常需要将数据可视化&#xff0c;分享一些Matplotlib图的汇总&#xff0c;在数据分析与可视化中是非常有用。 如下协一些常用图形。 安装相关插件 python3 pip3 install scipy python3 pip3 install pandas python3 pip3 install matplotlib python…

【技巧】如何设置Word文档部分内容“限制编辑”?

我们知道&#xff0c;Word文档可以设置“限制编辑”&#xff0c;也就是保护文档不被随意更改。 那如果只想保护文档中的部分内容&#xff0c;其他内容还是随意编辑更改&#xff0c;是否可以设置部分内容“限制编辑”&#xff1f;答案是可以的&#xff0c;下面小编来举例说明一…

【Tomcat】Tomcat部署及优化

Tomcat 它是一个免费、开源的web应用服务器&#xff1b;基于java代码开发的软件&#xff1b;处理动态请求和基于Java代码的页面开发&#xff1b; 可以在html当中写入Java代码&#xff0c;Tomcat可以解析html页面当中的Java代码&#xff0c;执行动态请求以及动态页面 缺点&#…

静态时序分析与时序约束

一、时序分析的基本概念 1. 时钟 理性的时钟模型是一个占空比为50%且周期固定的方波&#xff1a; 实际电路中输入给FPGA的晶振时钟信号是正弦波&#xff1a; 2. 时钟抖动 Clock Jitter&#xff0c;时钟抖动&#xff0c;相对于理想时钟沿&#xff0c;实际时钟存在不随时钟存在…

生信豆芽菜-火山图绘制使用说明

网站&#xff1a;http://www.sxdyc.com/visualsVolcano 一、火山图简介 火山图是散点图的一种&#xff0c;它将统计测试中的统计显著性量度&#xff08;如p value&#xff09;和变化幅度&#xff08;logFC&#xff09;相结合&#xff0c;能够快速直观地识别那些变化幅度较大且具…

记一次前端直接上传图片到oss报错

前端直接上传图片到阿里云oss,相关过程官网和网上资料已经很详细&#xff0c;不做赘述。 但这个过程比较复杂&#xff0c;前后端对接过程中很容易出现报错&#xff0c;这里遇到了以下报错&#xff0c;不容易排查。 请求显示net::ERR_NAME_NOT_RESOLVED错误&#xff0c;catch输…