C# 我无法打开.xlsx文件

C# 我无法打开.xlsx文件,c#,excel,oledb,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\";"); OleDbConnect

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

查看这在连接字符串中的作用:


扩展属性=\“Excel 8.0;HDR=YES;\”我相信您的其余连接字符串是正确的。

您是否在64位Windows上运行它?上次我检查Excel工作簿的OLE驱动程序时,它不能与64位Windows一起工作

将允许您从.NET阅读Excel工作簿,并使用.NET 2.0+-包括64位Windows

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


免责声明:我拥有SpreadsheetGear LLC

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

2010年12月,Microsoft(终于!)发布了一个用于CSV和XLSX文件的64位OLEDB驱动程序

您将需要64位。确保下载64位版本(
AccessDatabaseEngine_X64.exe
)。您需要卸载任何32位Office应用程序(包括Sharepoint Designer!)才能安装它

如果您想要CSV,您将需要
Microsoft Access文本驱动程序(*.txt,*.CSV)
驱动程序名称,但我还无法使用OLEDB中的此驱动程序找到完整的连接字符串(尽管如果有,请留下一条建议,我将修改此答案)。请注意,64位名称与32位版本不同

要读取XLSX文件,请使用如下连接字符串:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
 + FilePath
 + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
 + FilePath
 + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
对于XLS(2007年以前的Excel)文件,请使用如下连接字符串:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
 + FilePath
 + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
 + FilePath
 + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";

当我遇到同样的问题时,非常感谢并为我指出了正确的方向,并且为我提供了适合写这个答案的内容

“不开放”是什么意思?您没有打开任何内容,而是在运行查询。语法很好,如果没有异常,则表明dt是用行填充的,或者工作表是空的。添加Console.WriteLine(dt.Rows.Count)进行基本检查。我建议您直接尝试一个SELECT表达式,并在填充dt之前查看返回的内容。如果查询出现错误,请将其添加到此处的问题中。如果它没有,并且说它成功了,那么汉斯是正确的,因为你的工作表是空的。乔,你完全正确。就这样。因为它在我有32位窗口的办公室工作,而在我家我有64位。谢谢你,乔