经常会遇到网友提问:如何实现在不打开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)相关推荐

  1. 如何批量合并Excel文件和工作表 - Excel合并器使用教程

    Excel是人们用于创建日常工作表和统计信息的最流行的工具,在我们工作中经常接触到Excel的XLSX和XLS格式文件.不少朋友应该有时会发现,管理太多的Excel工作表和文件是一件头疼的事情,经常需 ...

  2. 用ado打开Excel文件时报外部表不是预期的格式的解决方法

    在用ado将Excel表格数据导入到数据库时,ado打开Excel文件报"外部表不是预期的格式"的错误码.其原因是Excel数据格式不是标准的Microsoft Excel的数据格 ...

  3. 如何获得excel文件名和工作表名

    一.如何获得excel当前文件名和工作表名 方法一:已经指定工作薄 当前文件名公式=MID(CELL("filename",A1),FIND("[",CELL( ...

  4. kettle读取json文件并读取数据_Labview打开Excel文件读取数据

    Labview有几种打开excel的方式,各有利弊. 大水怪出没请注意:Labview使用Excel处理数据(打开Excel)​zhuanlan.zhihu.com 这一篇介绍了通过使用Active打 ...

  5. 快速撤销excel文件的工作表保护

    excel文件设置了工作表保护,想要编辑文件,在撤销的时候发现需要输入密码才能够撤销,但是并不知道密码该怎么办,这种情况,就可以使用第三方软件进行解除限制.比如奥凯丰 EXCEL解密大师. [EXCE ...

  6. 关于Excel下通过VBA实现工作簿文件下工作表的合并

    对于普通使用者而言,Excel是一个比较强大的数据处理工具.一般公司的普通职员常使用它来完成数据的录入分析,但是当面对处理经由多人按统一模板统计完成的录入数据分析时,数据将分散存放在多个.xlsx文件 ...

  7. python怎么打开excel文件并处理_python处理excel文件

    python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 可从这里下载https://pypi.python.org/pypi.下面分别记录 ...

  8. Python自动化必会技能-Excel文件读取

    01 重点 在自动化测试过程中,经常需要使用excel文件来存储测试用例,那么在表格内设计好了测试用例数据后,如何通过自动化读取呢?此时就需要测试小姐姐动手写"代码"了~ 本文主要 ...

  9. python实现Excel文件读取的程序(附源代码)

    python实现Excel文件读取的程序   前一段时间帮一个朋友用python写了一个读Excel程序操作的程序,具体要求为:读取两个Excel文件,根据其中某个特征的特征值对这两个文件进行取交集操 ...

最新文章

  1. tensorflow filter_variables
  2. 脱式计算机在线使用,脱式计算,
  3. 局域网查看计算机慢,局域网内的电脑访问共享文件夹速度很慢如何解决
  4. 打造最舒适的webview调试环境
  5. 关系数据库——sql增删改
  6. iOS相同字符串保存地址唯一
  7. UVA10909 Lucky Number题解
  8. jira7.3.6添加导出excel的按钮
  9. Mysql记录历史执行的sql
  10. 创建一个SpringBoot项目(IDEA版本,保姆级教程)
  11. 搭建 Extmail企业邮件服务
  12. 如何测试电脑网速情况
  13. html5设计页面背景颜色,网页背景设计全攻略
  14. Qt中波兰语不显示尖音符
  15. git push时提示邮箱格式不正确
  16. 如何从初级程序员变成高级程序员?
  17. CyberArk被评为2021年Gartner特权访问管理魔力象限的领导者
  18. python 多态 知乎_Python鸭子类型和多态
  19. Vmware 虚拟机设置主机映射端口
  20. Fumark支持SLI双卡测试设置

热门文章

  1. eos 区块链 java 开发_EOS 交易验证的主要思路 - EOS 区块链开发实战
  2. docker搭建企业级habor仓库
  3. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵 【模拟】
  4. jvm的内存分布,参数配置 和 GC处理机制
  5. jbox弹窗_强大的jquery弹出层插件jBox
  6. 有道云笔记客户端的下载和安装、使用(博主推荐)
  7. 南京大学计算机专业拂晓,南京大学2020年计算机学科录取推免生222人,全部来自211高校...
  8. 怎么把虚拟机的计算机弄到桌面,Win10自带的虚拟机功能,教你这样设置,免费让一台电脑变3台!...
  9. Asuswrt RT-AC68U 华硕路由器文件删除漏洞 栈溢出
  10. python爬虫和医学数据_【爬虫】(八)Python之爬虫和数据小解析