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 に答える