日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/1/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不打开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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。