0

我正在尝试使用 OleDbDataAdapter 函数将 Excel 97 单选项卡式电子表格加载到 SQL 服务器表中。从我找到的所有文档中,第一个参数应该是“select * from [sheet1$]”。仅当工作表中的选项卡名为 Sheet1 时,这对我来说才有效。如果我将 [] 括号中的内容更改为实际的选项卡名称,它也可以正常工作。

问题是正在加载的电子表格来自另一个系统,并且该系统在每次加载时都会更改选项卡名称。如何弄清楚选项卡名称是什么,以便我的用户不必打开电子表格并重命名选项卡?

4

2 回答 2

1

好的,首先,打开与 Excel 电子表格的 OleDB 连接。

然后,使用类似下面的东西(在 VB.NET 中显示):

Imports System.Data
Imports System.Data.Odbc
Imports System.Data.OleDb

Dim DSN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MYEXCELFILE.XLS;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;MAXSCANROWS=12"""
Dim OleDbConn As New OleDbConnection(DSN)
OleDbConn.Open()
Dim tables As System.Data.DataTable = OleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
Dim tableName As String
Dim canBeImported As Boolean
For Each dr As System.Data.DataRow In tables.rows
    tableName = dr.Item("TABLE_NAME").ToString
    canBeImported = (tableName.IndexOfAny(New Char() {" ","[","]","'","""","`",";"}) < 0)
Next
OleDbConn.Close()

这将遍历 Excel 文件中的所有表(表 = 工作表或命名范围)并获取每个表的名称。此外,它会过滤掉任何包含无法通过 ODBC 访问的字符的表(空格是最常见的问题)。

于 2009-06-16T16:28:46.813 回答
0

我过去曾对此进行过调查,我一直得出的结论是,我必须对给我电子表格的人强制执行选项卡名称,似乎没有可靠的方法来找到它们。

于 2009-06-16T16:27:33.723 回答