【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.rhkb.cn/news/86300.html

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

相关文章

4.1 Windows终端安全

数据参考&#xff1a;CISP官方 目录 安全安装保护账户安全本地安全策略安全中心系统服务安全其他安全设置软件安全获取 一、安全安装&#xff08;以安装windows系统为例&#xff09; 选择合适的版本 商业版本&#xff1a;家庭版、专业版、专业工作站版、企业版特殊版本&…

哪些CRM的报价公开且透明?

企业在选型时&#xff0c;会发现很多品牌的CRM系统价格并不透明&#xff0c;往往都是需要跟产品顾问沟通后才能了解。下面推荐一款价格实在的CRM系统&#xff0c;所有报价公开透明&#xff0c;那就是Zoho CRM。 Zoho CRM是什么&#xff1f; Zoho CRM是一款在线CRM软件&#x…

音视频研发分享:关键帧截图+wasm快照--我又做了一件有益于社会的事情

音视频研发分享&#xff1a;关键帧截图wasm快照--我又做了一件有益于社会的事情 简单的一个视频设备快照功能到底有多费事多费电&#xff1f;新的方法有方法&#xff01; 省了多少电&#xff1f; 简单的一个视频设备快照功能到底有多费事多费电&#xff1f; 以前&#xff0c;我…

leetcode24. 两两交换链表中的节点

题目&#xff1a;leetcode24. 两两交换链表中的节点 描述&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 思路&…

MapReduce基础原理、MR与MPP区别

MapReduce概述 MapReduce&#xff08;MR&#xff09;本质上是一种用于数据处理的编程模型&#xff1b;MapReduce用于海量数据的计算&#xff0c;HDFS用于海量数据的存储&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;。Hadoop MapR…

【力扣每日一题】2023.8.12 合并K个升序链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个链表数组&#xff0c;数组里的链表都是升序的&#xff0c;让我们合并这些链表&#xff0c;要求合并之后还是升序的。 最简…

【C语言】数据在内存中的存储详解

文章目录 一、什么是数据类型二、类型的基本归类三、 整型在内存中的存储1.原码、反码、补码2.大小端(1)什么是大小端(2)为什么会有大小端 四、浮点型在内存中的存储1. 浮点数存储规则 五、练习1.2.3.4.5.6.7. 一、什么是数据类型 我们可以把数据类型想象为一个矩形盒子&#x…

JVM—内存管理(运行时数据区)、垃圾回收

背景介绍 当JVM类加载器加载完字节码文件之后&#xff0c;会交给执行引擎执行&#xff0c;在执行的过程中会有一块JVM内存区域来存放程序运行过程中的数据&#xff0c;也就是我们图中放的运行时数据区&#xff0c;那这一块运行时数据区究竟帮我们做了哪些工作&#xff1f;我们…

阿里巴巴面试题---考察对底层源代码的熟悉程度

题目如图所示: 很多人可能会觉得两个输出都会是false,因为我们都会觉得""比较的是引用类型的地址,虽然放入的值都一样但是重新创造了新对象,地址不一样,所以结果都是false. 然而,当我们运行程序会发现结果都是false. 下面,我们来分析为什么是这样的结果. 我们知道…

DolphinScheduler集群搭建详细笔记

1.DolphinScheduler Cluster部署 1.1 集群部署规划 集群模式下&#xff0c;可配置多个Master及多个Worker。通常可配置2~3个Master&#xff0c;若干个Worker。由于集群资源有限&#xff0c;此处配置一个Master&#xff0c;三个Worker&#xff0c;集群规划如下。 主机名ip服务…

sklearn机器学习库(一)sklearn中的决策树

sklearn机器学习库(一)sklearn中的决策树 sklearn中决策树的类都在”tree“这个模块之下。 tree.DecisionTreeClassifier分类树tree.DecisionTreeRegressor回归树tree.export_graphviz将生成的决策树导出为DOT格式&#xff0c;画图专用tree.export_text以文字形式输出树tree.…

【论文阅读】DEPCOMM:用于攻击调查的系统审核日志的图摘要(SP-2022)

Xu Z, Fang P, Liu C, et al. Depcomm: Graph summarization on system audit logs for attack investigation[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 540-557. 1 摘要 ​ 提出了 DEPCOMM&#xff0c;这是一种图摘要方法&#xff0c;通过将大图划…

axios请求

参考&#xff1a;https://www.axios-http.cn/docs/instance

windows安装docker 异常解决

Docker for Windows 安装Docker for Windows报错信息&#xff1a;Docker Desktop requires Windows 10 Pro/Enterprise/Home (18363). 解决方式 1.更新 Windows 系统版本Windows10Upgrade9252.exe 下载地址下载完运行 Windows10Upgrade9252.exe更新完&#xff0c;安装 Docke…

【Hilog】鸿蒙系统日志源码分析

【Hilog】鸿蒙系统日志源码分析 Hilog采用C/S结构&#xff0c;Hilogd作为服务端提供日志功能。Client端通过API调用&#xff08;最终通过socket通讯&#xff09;与HiLogd打交道。简易Block图如下。 这里主要分析一下。Hilog的读、写、压缩落盘&#xff0c;以及higlog与android…

python异步IO完全指南

原地址&#xff1a;https://flyingbyte.cc/post/async_io/ python异步IO完全指南 做为一种并行编程的範式&#xff0c;异步IO在Python中非常受重视&#xff0c;从Python3.4到3.7快速演进。 我们已经有多线程&#xff0c;多进程&#xff0c;并发&#xff08;concurrency&#x…

第R3周 - 天气预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境&#xff1a; 语言环境&#xff1a;Python3.10.7编译器&#xff1a;VScode深度学习环境&#xff1a;TensorFlow 2.13.0 数据集&#xff1a; 一、前期…

健启星|医学营养的市场先行者

随着《“健康中国2030”规划纲要》、《国民营养计划&#xff08;2017-2030年&#xff09;》等政策的陆续发布&#xff0c;标志着以传统药物治疗为中心的医疗模式时代正式转型到以预防和康复为中心的新的医学营养时代。在此背景下&#xff0c;符合时代需求的特医食品成为“医学营…

UML箭头汇总

参考&#xff1a;http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html 1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言。 简单说就是以图形方式表现模型&#xff0c;根据不同模型进行分类&#xff0c;在UML 2.0中有13种图&#xff…

Spring Boot | 使用mkcert本地生成SSL证书配置后端接口为HTTPS协议

Tips&#xff1a;本篇博客是 Windows 版本的使用教程&#xff0c;cmd 中执行的命令前缀是下载的软件名称&#xff0c;需要改成自己下载软件的名称&#xff01; 下载软件 首先去 GitHub 仓库中下载软件&#xff0c;下载完成后将文件保存在英文路径下的文件夹&#xff0c;之后以…