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 回答