我正在尝试在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文件中包含空格和打印区域。
答案 0 :(得分:0)
找到了解决方案。
如果上传的excel文件中的任何工作表名称包含空格,oledb似乎将其包装在单引号之间。这似乎现在有效:
Dim schema As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "'sheetname $'"})