GetOleDbSchemaTable抛出异常,因为它找不到对象表''Print_Area'

时间:2017-12-04 13:22:31

标签: excel vb.net oledbconnection

我正在尝试在vb.net应用程序中公开excel中的列名。代码看起来像这样。

Dim EXCEL_CONNECTION_TEMPLATE As String =
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES;'"
Using con As OleDbConnection = New OleDbConnection(String.Format(EXCEL_CONNECTION_TEMPLATE, savePath))
    con.Open()
    Dim schema As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, Nothing)
    DoStuffWith(schema)
End Using

执行后,我得到GetOleDbSchemaTable抛出的异常:

  

Microsoft Jet数据库引擎找不到该对象   ''sheetname $'Print_Area'。确保对象存在并且您确定   正确拼写其名称和路径名称。   System.Data.OleDb.OleDbException

看起来GetOleDbSchemaTable如果它们包含空格并且同时用它定义了打印区域,则表单名有问题。

试图提供如下参数:

Dim schema As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "sheetname $"})

这样它就没有抛出异常,但没有返回任何值。

欢迎任何提示/解决方法/建议。并且显然不能要求用户不要在他们上传的excel文件中包含空格和打印区域。

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

如果上传的excel文件中的任何工作表名称包含空格,oledb似乎将其包装在单引号之间。这似乎现在有效:

Dim schema As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "'sheetname $'"})