日期: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
正常读取新版 .xlsx
的Excel
文件的数据啦。
本文也只是浅谈了一下使用教程,对原理感兴趣的小伙伴也可以继续研究微软的相关知识,或者大佬们也可以留言,为我们大家解惑。
编写教程不易,希望各位小伙伴可以给个赞,让更多的小伙伴可以看到,参与话题讨论中来。
参考文章:
- 《Microsoft OLE DB Provider for Microsoft Jet》
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/132131301