我无法打开.xlsx文件

时间:2010-04-11 15:40:33

标签: c# excel oledb

我想打开一个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);

4 个答案:

答案 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 postthis 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。

您可以查看实时样本here并下载免费试用here

免责声明:我拥有SpreadsheetGear LLC

答案 3 :(得分:0)

除了Phillip的回答,请确保将TargetPlatform设置为x86。