【VB6|第22期】用SQL的方式读取Excel数据

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


在这里插入图片描述


文章目录

  • 一、前言
  • 二、使用第三方库(Jet.OLEDB)
    • (2-1)添加引用
    • (2-2)创建对象实例
    • (2-3)数据连接字符串解析(重点)
    • (2-4)读取.xls格式的数据
    • (2-5)读取.xlsx格式的数据
  • 三、结束语


一、前言

Microsoft Excel 是广泛使用的电子表格软件, 在 VB6 中,读取 Excel 数据是常见的任务,可以用于数据处理、信息展示等。本文将介绍通过 第三方库(Jet.OLEDB 读取 Excel 数据,话不多说,直接上教程。

二、使用第三方库(Jet.OLEDB)

Jet.OLEDB 是一种广泛使用的数据访问技术,我们可以通过它来读取 Excel 数据。这种方法通常被大家认定为只可以读取早期版本的 Excel 文件(Excel 97-2003,格式:.xls),难道真的不可以读取高版本的数据了吗?这里留个疑问,我们继续…

(2-1)添加引用

首先,我们在工程引用中添加 Microsoft ActiveX Data Objects xx.x Library的引用。
在这里插入图片描述
这个是采用了 前期绑定(静态绑定) 的方式,如果换乘 后期绑定(动态绑定) 的方式,就不需要添加引用,直接CreateObject获得对象实例就可以。

(2-2)创建对象实例

  • 前期绑定(静态绑定) 创建方式
Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset
  • 后期绑定(动态绑定) 创建方式
Set CN = CreateObject("adodb.connection")
Set RS = CreateObject("adodb.recordset")

(2-3)数据连接字符串解析(重点)

数据连接字符串如下所示:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<path>;Extended Properties=""Excel 8.0;HDR=Yes;"";
  • Provider: 指定要使用的数据提供程序。在这里,我们使用了 Microsoft Jet OLEDB 4.0 提供程序,该提供程序用于访问 Microsoft Excel 文件。
  • Data Source: 指定 Excel 文件的路径。你需要将 <path> 替换为实际的Excel 文件路径,比如 D:\example.xls
  • Extended Properties: 用于指定连接的扩展属性。在这里,我们设置为 Excel 8.0;HDR=Yes; ,其参数说明如下:
Extended Properties参数说明
Excel 8.0表示连接使用 Excel 97-2003 的文件格式。
Excel 12.0表示连接使用 Excel 2007 及以上的文件格式,但是这个参数,不过不可用于Microsoft Jet OLEDB 4.0 提供程序
HDR=Yes表示第一行的数据包含列标题
HDR=No表示第一行的数据将被当作普通数据,而不是列标题。

(2-4)读取.xls格式的数据

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

示例代码:

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

(2-5)读取.xlsx格式的数据

尝试一:

数据连接字符串:

sXLPath = App.Path & "\example.xlsx"
CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 8.0;HDR=Yes;"";"
CNStr = Replace(CNStr, "{path}", sXLPath)

测试结果:
在这里插入图片描述
尝试二:

数据连接字符串:

 sXLPath = App.Path & "\example.xlsx"
CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 12.0;HDR=Yes;"";"
CNStr = Replace(CNStr, "{path}", sXLPath)

测试结果:
在这里插入图片描述

三、结束语

经测试,我们会发现 Microsoft.Jet.OLEDB.4.0 确实只支持读取旧版本的 Excel 文件(即 .xls 格式的数据)。这是因为Microsoft Jet OLEDB 4.0 是一个较旧的数据提供程序,最初用于访问 Access数据库和旧版本的 Excel 文件,而新版本 Excel 文件使用了不同的数据存储格式,所以它并不支持直接读取的。

实际上,Microsoft.Jet.OLEDB.4.0 也可以读取新版 Excel 文件的。鉴于文章篇幅问题,下期我再出一期关于Microsoft.Jet.OLEDB.4.0 读取新版本 Excel 文件(即 .xlsx 格式的数据)的文章,出文速度看各位大佬的点赞速度了哈。


参考文章:

  • 《Microsoft OLE DB Provider for Microsoft Jet》

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

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

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

相关文章

系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

钉钉微应用

钉钉微应用 在做钉钉微应用开发的时候&#xff0c;遇到了一些相关性的问题&#xff0c;特此记录下&#xff0c;有遇到其他问题的&#xff0c;欢迎一起讨论 调试工具 当我们基于钉钉开发微应用时&#xff0c;难免会遇到调用钉钉api后的调试&#xff0c;这个时候可以安装eruda…

HTML,url,unicode编码

目录标题 HTML实体编码urlcode编码unicode编码小结基础例题高级例题 HTML实体编码 实体表示&#xff1a; 以&符号开始&#xff0c;后面跟着一个预定义的实体的名称&#xff0c;或是一个#符号以及字符的十进制数字。 例&#xff1a; <p>hello</p> <!-- 等同…

基于LNMP架构搭建Discuz论坛

LNMP: L---->linux系统&#xff0c;操作系统。 N----->nginx网站服务&#xff08;前端),提供前端的静态页面服务。同时具有代理、转发的作用。&#xff08;转发就是转发后端请求&#xff0c;转发PHP&#xff09;&#xff0c;nginx没有处理动态资源的功能&#xff0c;他有…

怎样将项目jar包放到服务器上

目录 1、在配置文件中配置账号密码 2.在父级的pom里面&#xff0c;加上这个标签 3. deploy部署 4. 注&#xff1a;这两个id得匹配上&#xff08;原因&#xff1a;有的人会只有上传到测试包的权限&#xff0c;id对应&#xff0c;拥有账号密码的才能有权限&#xff09; 5.子项…

RocketMQ基本概念和高级原理

基础概念 消息模型 RocketMQ 主要由 Producer、Broker、Consumer 三部分组成&#xff0c;其中 Producer 负责生产消息&#xff0c;Consumer 负责消费消息&#xff0c;Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器&#xff0c;每个 Broker 可以存储多个 Topic…

谷粒商城第十天-获取分类属性分组(前端组件抽取父子组件交互)

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 将分类树前端代码抽取成一个组件 2.2 使用elementUI的组件实现左右组件功能 2.3 使用事件机制进行组件通信 三、后端部分 四、总结 一、总述 说一下今天需要实现一个什么样子的功能&#xff1a; 很简单&am…

Rpc异步日志模块

Rpc异步日志模块作用 在一个大型分布式系统中&#xff0c;任何部署的分布式节点都可能发生崩溃&#xff0c;试想如果用普通的办法&#xff0c;即先排查哪个节点down掉了&#xff0c;找到down掉的节点后采取调试工具gdb调试该节点&#xff0c;进而排查宕机的原因。这中排查方法…

【LeetCode】地下城游戏(动态规划)

地下城游戏 题目描述算法分析编程代码 链接: 地下城游戏 题目描述 算法分析 编程代码 class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m dungeon.size();int n dungeon[0].size();vector<vector<int>> d…

linux c++网络编程基础:服务端与客户端的实现

在Linux环境下,我们可以使用socket编程来实现网络通信。下面是一个简单的C++版本的客户端和服务端的示例代码。 服务端代码: #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #

BigDecimal的用法及遇到的问题

1.Non-terminating decimal expansion; no exact representable decimal result. 原因是使用除法未指定保留的小数位数&#xff0c;当除不尽的时候会报这个错误&#xff0c;解决方法&#xff1a; BigDecimal avgCasePrice totalPrice.divide(BigDecimal.valueOf(2),new Math…

【flink】Chunk splitting has encountered exception

执行任务报错&#xff1a; Chunk splitting has encountered exception 错误信息截图&#xff1a; 完整的错误信息&#xff1a; 16:30:43,911 ERROR org.apache.flink.runtime.source.coordinator.SourceCoordinator [SourceCoordinator-Source: CDC Sourceorg.jobslink.flink…

百度智能创做AI平台

家人们好&#xff0c;在数字化时代&#xff0c;人工智能正引领着一场前所未有的创新浪潮。今天&#xff0c;我们将为大家介绍百度智能创做AI平台&#xff0c;这个为创意赋能、助力创作者的强大工具。无论你是创意工作者、内容创作者&#xff0c;还是想要释放内心创造力的个人&a…

Django------信号

Django 框架包含了一个信号机制&#xff0c;它允许若干个发送者&#xff08;sender&#xff09;通知一组接收者&#xff08;receiver&#xff09;某些特定操作或事件(events)已经发生了&#xff0c; 接收者收到指令信号(signals)后再去执行特定的操作。本文主要讲解Django信号(…

electron-builder 打包 exe 报错 Error output: Plugin not found, cannot call UAC::_

报错信息&#xff1a; Error: C:\Users\***\AppData\Local\electron-builder\cache\nsis\nsis-3.0.1.13\Bin\makensis.exe exited with code 1 Output: Command line defined: "APP_IDcom.baidu.app" Command line defined: "APP_GUIDfb00ccb0-0875-5f26-8d91-…

03 |「用户导航」

前言 实践是最好的学习方式&#xff0c;技术也如此。 文章目录 前言 1、向左箭头 需求&#xff1a;向应用红栏添加向上按钮&#xff08;向左箭头&#xff09; 向左箭头始终用于导航到层次结构中的父屏幕&#xff1b; 与后退按钮的区别是&#xff0c;后退按钮导航至用户上次查看…

Redis 单线程VS多线程

面试题 redis到底是单线程还是多线程&#xff1f;IO多路复用是什么&#xff1f;redis为什么快&#xff1f; Redis单线程 是什么 Redis的版本很多3.x、4.x、6.x&#xff0c;版本不同架构也是不同的&#xff0c;不限定版本问是否单线程也不太严谨。 1、版本3.x &#xff0c;最…

面试测试开发被问到数据库索引不知道怎么办?

提出的问题 什么情况下创建索引&#xff0c;什么时候不需要索引&#xff1f; 索引的种类有哪些&#xff1f; 什么是索引 索引就是帮助数据库管理系统高效获取数据的数据结构&#xff0c;就好比一本书的目录&#xff0c;它可以帮我们快速进行特定值的定位与查找&#xff0c;…

最新AI创作系统ChatGPT源码V2.5.8/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt+MJ以图生图+思维导图生成!

使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到系统&#xff01; 最新版【V2.5.8】更新&#xff1a; 新增 MJ 官方图片重新生成指令功能同步官方 Vary 指令 单张图片对比加强 Vary(Strong) | Vary(Subtle)同步官方 Zoom 指令 单张图片无限缩放 Zoom out 2x | Zoom ou…

python_day18_socket客户端

客户端 import socket# 创建socket对象 socket_client socket.socket() # 链接服务器 socket_client.connect(("localhost", 19999))发消息 while True:# 发消息msg input("输入&#xff1a;")if msg exit:breaksocket_client.send(msg.encode("U…