次の関数を使用して、OleDB スキーマ テーブルからシート名を取得しています。
Public Function GetSheetName(ByVal dtSchema As DataTable) As String
Dim sheetName As String = ""
Try
If Not dtSchema.Rows(0)("TABLE_NAME").ToString().Contains("#") Then
sheetName = dtSchema.Rows(0)("TABLE_NAME").ToString()
End If
Catch ex As Exception
BuildResultTraceString("Exception in GetSheetName")
BuildResultTraceString(ex.Message)
End Try
Return sheetName
End Function
そして、次のようにテーブルを取得します。
sql.Append("SELECT * FROM [" & sheetName & "A22:T10000]")
dt = _dh.GetTable(sql.ToString())
ただし、「20130418113010937」という名前のシートを読み込もうとすると、Get Table メソッドが次の例外をキャッチします。
The Microsoft Access database engine could not find the object ''20130418113010937$'A2:I10000'
私が使用している他のすべてのシート名で機能しますが、これでは機能しません。完全に数値化されているからだと思います。これに対する回避策はありますか? プロセスは自動化されているため、プログラムで何らかの方法で変更しない限り、シート名を手動で変更することはできません。
ありがとう!