我想打开一个xlsx文件,我已经尝试了下面的代码,但它既没有打开也没有抛出任何错误。
任何人都可以发光吗
string path = "C:\\examples\\file1.xlsx";
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbConnection cn = new OleDbConnection(connString);
cn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", cn);
DataTable dt = new DataTable();
adapter.Fill(dt);
答案 0 :(得分:6)
2010年12月,微软(最终!)发布了一个用于CSV和XLSX文件的64位OLEDB驱动程序。
您需要64位Microsoft Access Database Engine 2010 Redistributable。确保下载64位版本(AccessDatabaseEngine_X64.exe
)。您需要卸载任何32位Office应用程序(包括Sharepoint Designer!)才能安装它。
如果你想要CSV,你需要Microsoft Access Text Driver (*.txt, *.csv)
驱动程序名称,但是我还没有找到一个完整的连接字符串,但是使用OLEDB的这个驱动程序(尽管你有,请留下一个赞扬和我会修改这个答案)。请注意,64位名称与32位版本不同。
要读取XLSX文件,请使用如下连接字符串:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ FilePath
+ ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
对于XLS(2007年之前的Excel)文件,请使用如下连接字符串:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ FilePath
+ ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
非常感谢this blog post和this answer在我遇到同样的问题时指出了正确的方向,并提供了我适合写这个答案的内容。
答案 1 :(得分:1)
请参阅连接字符串中的内容:
扩展属性= \“Excel 8.0; HDR = YES; \”我相信你的连接字符串的其余部分是正确的。
答案 2 :(得分:1)
您是在64位Windows上运行吗?上次我检查Excel工作簿的OLE驱动程序无法使用64位Windows。
SpreadsheetGear for .NET将允许您从.NET读取Excel工作簿并使用.NET 2.0+ - 包括64位Windows。
免责声明:我拥有SpreadsheetGear LLC
答案 3 :(得分:0)
除了Phillip的回答,请确保将TargetPlatform设置为x86。