【VB6|第23期】原来Jet.OLEDB也可以读取新版.xlsx的Excel文件
日期: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.ConnectionDim 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 StringDim 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 VariantaryData = RS.GetRowsRS.CloseCN.Close'输出,获取二维数组的行数和列数Dim rows As Long, cols As Longrows = UBound(aryData, 1) + 1 ' 行数cols = UBound(aryData, 2) + 1 ' 列数' 遍历二维数组Dim i As Long, j As LongFor i = 0 To rows - 1For j = 0 To cols - 1' 访问二维数组中的元素Debug.Print "aryData(" & i & ", " & j & ") = " & aryData(i, j)Next jNext 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.WorkbookXlApp.Visible = False
Set XlBook = XlApp.Workbooks.Open(sXLPath)'嵌套 三、Jet.OLEDB读取旧版.xls格式的Excel 的代码
'实现SQL读取.xlsx和.xls格式的ExcelXlBook.Close
XlApp.Quit
(4-2) 后期绑定(动态绑定)
Dim XlApp As Object 'New Excel.Application
Dim XlBook As Object 'New Excel.WorkbookSet XlApp = VBA.CreateObject("Excel.Application")
XlApp.Visible = False
Set XlBook = XlApp.Workbooks.Open(sXLPath)'嵌套 三、Jet.OLEDB读取旧版.xls格式的Excel 的代码
'实现SQL读取.xlsx和.xls格式的ExcelXlBook.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 StringsXLPath = 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.ApplicationDim XlBook As Object 'New Excel.WorkbookSet XlApp = VBA.CreateObject("Excel.Application")XlApp.Visible = FalseSet XlBook = XlApp.Workbooks.Open(sXLPath)'======加上这个,就可以读取.xlsx格式的Excel文件啦======' NO1:前期绑定(静态绑定)' 需要添加对Microsoft ActiveX Data Objects xx.x Library的引用(版本号根据ADO版本变化)Dim CN As New ADODB.ConnectionDim 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 StringDim 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 VariantaryData = RS.GetRowsRS.CloseCN.Close'======加上这个,就可以读取.xlsx格式的Excel文件啦======XlBook.CloseXlApp.Quit'======加上这个,就可以读取.xlsx格式的Excel文件啦======'输出,获取二维数组的行数和列数Dim rows As Long, cols As Longrows = UBound(aryData, 1) + 1 ' 行数cols = UBound(aryData, 2) + 1 ' 列数' 遍历二维数组Dim i As Long, j As LongFor i = 0 To rows - 1For j = 0 To cols - 1' 访问二维数组中的元素Debug.Print "aryData(" & i & ", " & j & ") = " & aryData(i, j)Next jNext 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
相关文章:
【VB6|第23期】原来Jet.OLEDB也可以读取新版.xlsx的Excel文件
日期:2023年8月11日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方…...
通过控制ros节点的启停,软实现人工控制和紧急停止功能的图示
通过控制ros节点的启停,软实现人工控制和紧急停止功能的图示 实现原理简介: 人工控制的节点: 键盘节点 方向盘节点 自动控制的节点: movebase 导航 autoware 等 底盘节点: 差速底盘 阿克曼底盘 控制节点࿱…...
面试热题(滑动窗口最大值)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 输入:nums [1,3,-1,-3,5,3,6,7], k 3 输出:[3,3,5,…...
【代码】表格封装 + 高级查询 + 搜索 +分页器 (极简)
一、标题 查询条件按钮(Header) <!-- Header 标题搜索栏 --> <template><div><div class"header"><div class"h-left"><div class"title"><div class"desc-test">…...
ant.design 组件库中的 Tree 组件实现可搜索的树: React+and+ts
ant.design 组件库中的 Tree 组件实现可搜索的树,在这里我会详细介绍每个方法,以及容易踩坑的点。 效果图: 首先是要导入的文件 // React 自带的属性 import React, { useMemo, useState } from react; // antd 组件库中的,输入…...
Linux系统编程之信号(上)
一、信号概念 信号就是软件中断。每当程序收到一个信号,都需要按指定的方法去处理。以下是UNIX系统的信号表。 其中core表示产生一个复制了该进程内存映像的core文件,它保存了程序现场,可以使用gdb来调试。 二、signal() signal()函数用于改…...
23.Netty源码之内置解码器
highlight: arduino-light Netty内置的解码器 在前两节课我们介绍了 TCP 拆包/粘包的问题,以及如何使用 Netty 实现自定义协议的编解码。可以看到,网络通信的底层实现,Netty 都已经帮我们封装好了,我们只需要扩展 ChannelHandler …...
sigmoid ReLU 等激活函数总结
sigmoid ReLU sigoid和ReLU对比 1.sigmoid有梯度消失问题:当sigmoid的输出非常接近0或者1时,区域的梯度几乎为0,而ReLU在正区间的梯度总为1。如果Sigmoid没有正确初始化,它可能在正区间得到几乎为0的梯度。使模型无法有效训练。 …...
RabbitMQ 消息队列
文章目录 🍰有几个原因可以解释为什么要选择 RabbitMQ:🥩mq之间的对比🌽RabbitMQ vs Apache Kafka🌽RabbitMQ vs ActiveMQ🌽RabbitMQ vs RocketMQ🌽RabbitMQ vs Redis 🥩linux docke…...
PHP实现在线进制转换器,10进制,2、4、8、16、32进制转换
1.接口文档 2.laravel实现代码 /*** 进制转换计算器* return \Illuminate\Http\JsonResponse*/public function binaryConvertCal(){$ten $this->request(ten);$two $this->request(two);$four $this->request(four);$eight $this->request(eight);$sixteen …...
报错 | Spring报错详解
Spring报错详解 一、前言二、报错提示三、分层解读1.最下面一层Caused by2.上一层Caused by3.最上层Caused by 四、总结五、解决方案 一、前言 本文主要是记录在初次学习Spring时遇到报错后的解读以及解决方案 二、报错提示 三、分层解读 遇到报错的时候,我们需要…...
PHP最简单自定义自己的框架数据库封装调用(五)
1、实现效果调用实现数据增删改查封装 2、index.php 入口定义数据库账号密码 <?php//定义当前请求模块 define("MODULE",index);//定义数据库 define(DB_HOST,localhost);//数据库地址 define(DB_DATABASE,aaa);//数据库 define(DB_USER,root);//数据库账号 def…...
使用Redis来实现点赞功能的基本思路
使用Redis来实现点赞功能是一种高效的选择,因为Redis是一个内存数据库,适用于处理高并发的数据操作。以下是一个基本的点赞功能在Redis中的设计示例: 假设我们有一个文章或帖子,用户可以对其进行点赞,取消点赞&#x…...
【黑马头条之app端文章搜索ES-MongoDB】
本笔记内容为黑马头条项目的app端文章搜索部分 目录 一、今日内容介绍 1、App端搜索-效果图 2、今日内容 二、搭建ElasticSearch环境 1、拉取镜像 2、创建容器 3、配置中文分词器 ik 4、使用postman测试 三、app端文章搜索 1、需求分析 2、思路分析 3、创建索引和…...
Nginx安装以及LVS-DR集群搭建
Nginx安装 1.环境准备 yum insatall -y make gcc gcc-c pcre-devel #pcre-devel -- pcre库 #安装openssl-devel yum install -y openssl-devel 2.tar安装包 3.解压软件包并创建软连接 tar -xf nginx-1.22.0.tar.gz -C /usr/local/ ln -s /usr/local/nginx-1.22.0/ /usr/local…...
后端开发9.商品类型模块
概述 简介 商品类型我设计的复杂了点,设计了多级类型 效果图 数据库设计...
spring框架自带的http工具RestTemplate用法
1. RestTemplate是什么? RestTemplate是由Spring框架提供的一个可用于应用中调用rest服务的类它简化了与http服务的通信方式。 RestTemplate是一个执行HTTP请求的同步阻塞式工具类,它仅仅只是在 HTTP 客户端库(例如 JDK HttpURLConnection&a…...
【flink】Checkpoint expired before completing.
使用flink同步数据出现错误Checkpoint expired before completing. 11:32:34,455 WARN org.apache.flink.runtime.checkpoint.CheckpointFailureManager [Checkpoint Timer] - Failed to trigger or complete checkpoint 4 for job 1b1d41031ea45d15bdb3324004c2d749. (2 con…...
【论文阅读】NoDoze:使用自动来源分类对抗威胁警报疲劳(NDSS-2019)
NODOZE: Combatting Threat Alert Fatigue with Automated Provenance Triage 伊利诺伊大学芝加哥分校 Hassan W U, Guo S, Li D, et al. Nodoze: Combatting threat alert fatigue with automated provenance triage[C]//network and distributed systems security symposium.…...
【ARM64 常见汇编指令学习 16 -- ARM64 SMC 指令】
文章目录 ARMv8 同步异常同步异常指令SMC TYPE 上篇文章:ARM64 常见汇编指令学习 15 – ARM64 标志位的学习 下篇文章:ARM64 常见汇编指令学习 17 – ARM64 BFI 指令 ARMv8 同步异常 在ARMv8架构中,同步异常主要包括以下几种: Un…...
RimSort终极指南:三步解决《边缘世界》模组冲突与排序难题
RimSort终极指南:三步解决《边缘世界》模组冲突与排序难题 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-…...
豆包无水印解析,一键提取超高效
我用夸克网盘给你分享了「瞬净-豆包版 链接:https://pan.quark.cn/s/ec800a1df2a7 通过网盘分享的文件:瞬净-豆包版 链接: https://pan.baidu.com/s/16JnPo8i99rczp5LQj7oNPA?pwd1314 提取码: 1314...
从CAN波特率索引表到寄存器:一份给嵌入式新手的底层配置原理图解
从CAN波特率索引表到寄存器:嵌入式开发的底层配置逻辑拆解 刚接触CAN总线的开发者,面对波特率配置时往往会遇到一个困惑:为什么有些开发板直接给出一张索引值对照表,而有些手册却要求手动配置7个寄存器?这两种方式背后…...
3分钟搞定游戏外语翻译:免费实时屏幕翻译神器Translumo完全指南
3分钟搞定游戏外语翻译:免费实时屏幕翻译神器Translumo完全指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo …...
别再死记硬背公式了!手把手教你理解DBC文件里的factor和offset(附CAN信号收发实战代码)
从代码反推DBC参数:工程师视角下的factor与offset实战指南 每次看到DBC文件里那些神秘的factor和offset参数,你是不是也和我当年一样,先机械地抄下公式,然后在调试时对着报错抓耳挠腮?作为在汽车电子行业摸爬滚打多年的…...
《AI大模型应用开发实战从入门到精通共60篇》020、高级RAG:多查询检索、重排序与HyDE技术
020 高级RAG:多查询检索、重排序与HyDE技术 从一次诡异的“答非所问”说起 上周三凌晨两点,我盯着终端里吐出的JSON发呆。用户问“苹果公司的总部在哪里”,RAG系统返回了“苹果是一种富含维生素C的水果”。Embedding相似度0.89,按…...
Spring Boot多租户实战指南(Tenant-Aware DataSource深度剖析)
更多请点击: https://intelliparadigm.com 第一章:Java 多租户数据安全隔离 在云原生与 SaaS 架构普及的背景下,Java 应用实现多租户(Multi-tenancy)已成为常态。数据安全隔离是其核心挑战——必须确保租户 A 无法访…...
从分子识别到信号放大:ELISA的核心逻辑与前沿突破
摘要:酶联免疫吸附测定技术作为现代生物医学研究的核心工具,在疾病诊断、药物分析和食品检测等领域发挥着不可替代的作用。本文系统阐述该技术的理论基础、方法学分类、关键影响因素及最新发展趋势,为相关领域的实验设计与结果分析提供参考框…...
ESP32无线桥接踩坑实录:esp-idf中CONFIG_LWIP_IPV4_NAPT不生效?问题排查与修复指南
ESP32无线桥接深度排障:从CONFIG_LWIP_IPV4_NAPT失效到完整解决方案 当你在ESP32上实现APSTA无线桥接时,是否遇到过这样的场景:手机能连接到ESP32创建的AP热点,却死活上不了网?控制台明明显示STA已成功连接路由器&…...
如何快速检测GPU显存故障?memtest_vulkan帮你3分钟搞定!
如何快速检测GPU显存故障?memtest_vulkan帮你3分钟搞定! 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 你是否遇到过显卡突然花屏、游戏…...
