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

3 篇文章 1 订阅

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


在这里插入图片描述



一、前言

上期文章《【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 文件的数据啦。
本文也只是浅谈了一下使用教程,对原理感兴趣的小伙伴也可以继续研究微软的相关知识,或者大佬们也可以留言,为我们大家解惑。
编写教程不易,希望各位小伙伴可以给个赞,让更多的小伙伴可以看到,参与话题讨论中来。


参考文章:


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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值