不打开Excel文件读取工作表名(ADOX)

2024-03-12 08:38

本文主要是介绍不打开Excel文件读取工作表名(ADOX),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经常会遇到网友提问:如何实现在不打开Excel工作簿文件的前提下,读取其中的工作表名称。说实话,我不太理解这个需求应用的场景,但是我相信存在的就是合理的,既然有人提问,可能就有其应用的场景。

方法1

常规实现思路是障眼法,这是个满(qī)足(piàn)用户的好方法,工作簿文件被打开了,但是用户看不到而已。示例文件中的工作表如下图。
在这里插入图片描述
VBA代码如下。

Sub getTablesNameFake()Dim objApp As Excel.ApplicationDim objWk As WorkbookDim strMsg As StringDim strPath As StringDim objSht As Worksheet'strPath = ThisWorkbook.Path & "\Excel2003.xls"strPath = ThisWorkbook.Path & "\Excel2016.xlsx"Set objApp = New Excel.ApplicationobjApp.Visible = falsesSet objWk = objApp.Workbooks.Open(strPath)strMsg = "工作簿中共有:" & objWk.Sheets.Count & " 个工作表" & vbNewLine & vbNewLineFor Each objSht In objWk.Sheetsi = i + 1strMsg = strMsg & "工作表" & i & ":" & vbTab & objSht.Name & vbNewLineNextMsgBox strMsgobjWk.Close FalseobjApp.QuitSet objApp = NothingSet objWk = NothingSet objSht = Nothing
End Sub

运行代码结果如下图。
在这里插入图片描述

代码解析:

第9行代码新建一个Excel应用程序。
第10行代码隐藏Excel应用程序。
第11行代码打开工作簿文件,注意等号右侧必须指定objApp,否者将在当前Excel应用程序中打开工作簿文件。
第12行代码统计工作表数量。
第13行到第16行代码循环结构遍历工作表名称。
第17行代码显示查询结果。
第18行代码关闭工作簿,并且不保存修改。
第19行代码退出新建的Excel应用程序。

方法2:

对于ADO(Microsoft ActiveXData Object),大家并不陌生,多数VBA用户都知道ADO是Microsoft继ODBC技术之后,基于OLE DB的一种数据库操作技术。这个和读取工作表名称有关系吗!
答案是YES,不过大家经常用到的是Microsoft ActiveX Data Objects x(不知道如何使用的,请自行补脑),其实还有另外一ADOX的库,其全称是Microsoft ADO Ext. x for DDL and security,其中DDL(Data Definition Language)用于创建数据库中的各种对象(表、视图、索引等)。

在VBA中使用前期绑定方式创建ADOX对象,需要在VBE中添加引用,如下图所示。
在这里插入图片描述
VBA代码如下所示。

Sub getTablesName()Dim Cat As New ADOX.CatalogDim Tb As ADOX.TableDim strMsg As StringDim strPath As StringDim i As Integer'strPath = ThisWorkbook.Path & "\Excel2003.xls"'Cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=yes;';Data Source=" & strPathstrPath = ThisWorkbook.Path & "\Excel2016.xlsx"Cat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;hdr=yes;';Data Source=" & strPathstrMsg = "工作簿中共有:" & Cat.Tables.Count & " 个工作表" & vbNewLine & vbNewLineFor Each Tb In Cat.Tablesi = i + 1strMsg = strMsg & "工作表" & i & ":" & vbTab & Tb.Name & vbNewLineNextMsgBox strMsgSet Cat = NothingSet Tb = Nothing
End Sub

运行代码结果如下图所示。请注意与方法1结果截图的区别,工作表的顺序与工作簿中的显示顺序不一致。
在这里插入图片描述

代码解析:

第2行和第3行代码声明ADOX对象。
第7行和第8行代码用于连接XLS文件,第9行和第10行代码用于连接XLSX文件,二种的区别在于OLEDB引擎版本和Properties参数。
第11行代码统计工作表数量。
第12行到第15行代码循环结构遍历工作表名称。
第16行代码显示查询结果。

对于比较大的工作簿文件,方法2借助ADOX引擎,其效率会更高些。

这篇关于不打开Excel文件读取工作表名(ADOX)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800709

相关文章

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元