我的VB.NET应用程序目前允许我将CSV文件转换为datatable,这要归功于大卫在我发布的以下问题中提供的代码:前一个问题
现在,我也尝试允许将.XLSX文件导入datatable。当前的代码如下:
Private Function ConvertCSVToDataTable(ByVal path As String) As DataTable
Dim dt As DataTable = New DataTable()
Using con As OleDb.OleDbConnection = New OleDb.OleDbConnection()
Try
If System.IO.Path.GetExtension(path) = ".csv" Then
con.ConnectionString = String.Format("Provider={0};Data Source={1};Extended Properties=""Text;HDR=YES;FMT=Delimited""", "Microsoft.Jet.OLEDB.4.0", IO.Path.GetDirectoryName(path))
ElseIf System.IO.Path.GetExtension(path) = ".xlsx" Then
con.ConnectionString = String.Format("Provider={0};Data Source={1};Extended Properties=""Excel 12.0 XML;HDR=Yes;""", "Microsoft.ACE.OLEDB.12.0", IO.Path.GetDirectoryName(path))
End If
Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM " & IO.Path.GetFileName(path), con)
Using da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(cmd)
con.Open()
da.Fill(dt)
con.Close()
End Using
End Using
Catch ex As Exception
Console.WriteLine(ex.ToString())
Finally
If con IsNot Nothing AndAlso con.State = ConnectionState.Open Then
con.Close()
End If
End Try
End Using
Return dt
End Function
但是,当我使用.XLSX文件运行代码时,会得到以下错误:
{“数据库引擎无法打开或写入文件'C:\Users\XSLXFilePath‘。它已由其他用户独占打开,或者您需要查看和写入其数据的权限。”}
据我所知,这个文件在任何地方都没有打开。而且,当.CSV文件通过它时,应用程序也运行得很好。我如何使应用程序正确地工作为.XLSX,或任何Excel文件格式?
发布于 2018-01-07 21:30:29
我认为错误来自连接字符串和OLEDB命令:
ConnectionString
您不必使用IO.Path.GetDirectoryName(path)
--它返回目录名,您必须提供文件完整路径:
con.ConnectionString = String.Format("Provider={0};Data Source={1};Extended Properties=""Excel 12.0 XML;HDR=Yes;""", "Microsoft.ACE.OLEDB.12.0", path)
有关excel连接字符串生成函数:将数据从excel 2003导入到dataTable,请参阅此链接
OLEDB命令
必须在命令中而不是文件名中提供工作表名称:
Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM [Sheet1$]" , con)
如果工作表名称是动态的,并且必须在excel文件中获得第一个工作表:
Dim dbSchema as DataTable = con.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, null)
Dim firstSheetname as String = dbSchema.Rows(0)("TABLE_NAME").ToString
Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM [" & firstSheetname & "]" , con)
参考资料
发布于 2019-10-25 06:00:13
.xlsx
文件可以使用以下连接字符串。我用过它,工作也很好。
P_FIle = ( File Name with path )
P_Con_Str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & P_File & ";Extended Properties=""Excel 12.0 XML;HDR=Yes;"""
https://stackoverflow.com/questions/47398344
复制相似问题