0

次の関数を使用して、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'

私が使用している他のすべてのシート名で機能しますが、これでは機能しません。完全に数値化されているからだと思います。これに対する回避策はありますか? プロセスは自動化されているため、プログラムで何らかの方法で変更しない限り、シート名を手動で変更することはできません。

ありがとう!

4

1 に答える 1

1

そうです、問題は数値シート名です。OleDB を使用してシート名を取得すると、数値名を一重引用符で囲むことで「有利」になります (おそらくその文字列性を保持するため)。

テーブル名の両端から一重引用符を削除すると、うまくいくはずです。

sheetName = dtSchema.Rows(0)("TABLE_NAME").ToString().Trim("'")
于 2013-04-18T18:37:00.920 に答える