.NET读取工作表名称问题

ComingVB 2016-02-01 06:33:56
网上搜索了很多 .NET 读取工作表名称的例子。
使用 Excel Application 对象来打开然后读取工作簿因为速度不理想,暂不考虑这个方法。
而使用 OLEDB 一般就是使用 GetOleDbSchemaTable 、 GetSchema 这两个函数。
使用 ADODB 使用 OpenSchema 函数。
但是实验之后,不论是用 OLEDB 还是 ADODB 来读取,返回的 DataTable 都是包含 0 个 Rows 。
连接字符串 Microsoft.Jet.OLEDB.4.0 和 Microsoft.ACE.OLEDB.12.0 都试过。

GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})

GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
也试过。

文件格式也试过 xls 和 xlsx 两个版本,都是用 Excel 保存的,排除文件格式的问题。
请有经验人士不吝赐教!

代码:


Public Function GetSheetName(ByVal bookpath As String) As List(Of String)

Dim lst As New List(Of String)
Dim Str As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & bookpath & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""
Dim con As New OleDbConnection(Str)

con.Open()
Dim dt As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
con.Close()
For k As Integer = 0 To dt.Rows.Count - 1
Str = dt.Rows(k)("TABLE_NAME").ToString
If Str Like "*$*" Then '
Str = Str.Replace(" ", "")
Str = Str.Replace("$", "")
lst.Add(Str)
End If
Next k
Return lst
End Function

...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ComingVB 2016-02-02
  • 打赏
  • 举报
回复
经过排查,原因是 Excel 文件由其他程序生成,估计是不带索引。用 Excel 保存的工作簿可以正常读取工作表名称。结帖。

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧