【问题标题】:I cannot open .xlsx file我无法打开 .xlsx 文件
【发布时间】:2010-04-11 15:40:32
【问题描述】:

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

【问题讨论】:

  • “未打开”是什么意思?你没有打开任何东西,你正在运行一个查询。语法很好,没有异常表明 dt 填充了行或工作表为空。添加 Console.WriteLine(dt.Rows.Count) 进行基本检查。
  • 我建议直接尝试一个 SELECT 表达式,然后在填充 DT 之前看看你得到了什么。如果查询出现错误,请将其添加到此处的问题中。如果它没有并说它成功,那么 Hans 是正确的,因为你的工作表是空的。

标签: c# excel oledb


【解决方案1】:

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 在我遇到同样的问题时为我指明了正确的方向,并提供了适合我编写此答案的内容。

【讨论】:

    【解决方案2】:

    您是否在 64 位 Windows 上运行它?上次我检查了 Excel 工作簿的 OLE 驱动程序不适用于 64 位 Windows。

    SpreadsheetGear for .NET 可让您从 .NET 读取 Excel 工作簿,并适用于 .NET 2.0+ - 包括 64 位 Windows。

    您可以查看实时示例here 并下载免费试用版here

    免责声明:我拥有 SpreadsheetGear LLC

    【讨论】:

    • 乔,你完全正确。就是这样。因为它在我有 32 位 Windows 的办公室里工作,而在我家我有 64 位。谢谢乔
    【解决方案3】:

    看看它在你的连接字符串中做了什么:

    Extended Properties=\"Excel 8.0;HDR=YES;\" 我相信您的连接字符串的其余部分是正确的。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2023-01-31
        • 1970-01-01
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-27
        • 1970-01-01
        相关资源
        最近更新 更多