我正在使用以下函数从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'
它适用于我正在使用的所有其他工作表名称,但它不适用于此名称。我认为这是因为它完全是数字的。这有什么解决方法吗?该过程是自动进行的,因此我无法手动更改工作表名称,除非我以某种方式以编程方式进行。
谢谢!
答案 0 :(得分:1)
你是对的,问题是数字表名称。当您使用OleDB检索工作表名称时,通过使用单引号包围数字名称(可能是为了保留其字符串),您可以“有利”。
从表名的两端删除单引号,你应该是好的:
sheetName = dtSchema.Rows(0)("TABLE_NAME").ToString().Trim("'")