Excel“外部表格格式不符合预期。”

169

我正在尝试使用以下代码读取Excel(xlsx)文件。如果我没有在Excel中打开该文件,则会出现“外部表格格式不正确”的错误。换句话说,在我能够从C#程序中读取它之前,我必须先在Excel中打开该文件。xlsx文件位于我们网络共享上。如何在不先打开文件的情况下读取文件? 谢谢

string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
    DataSet ds = new DataSet();
    adaptor.Fill(ds);
}

就我而言,我是在尝试使用当前ACE和建议的扩展属性打开Excel表格时收到了这个错误提示。当我手动打开文件时,它出现了一个提示,让我启用编辑权限。我需要找出如何自动翻转该位,但如果您也遇到此问题,您可能只需要打开该文件,然后启用编辑权限即可。我可以尝试查看一下能否以只读方式打开该文件,因为在本帖子的很远处我看到了有关此内容的信息。 - Jeff Patton
25个回答

0

正在处理一些旧代码时,遇到了同样的通用异常。很难追踪问题,所以我想在这里添加一下,以帮助其他人。

在我的情况下,项目中其他位置的代码在尝试打开文件之前(在基类中完成)打开了 Excel 文件上的 StreamReader。

因此,基本上我只需要首先在 StreamReader 对象上调用 Close() ,然后就可以成功地打开 OleDb 连接。这与 Excel 文件本身或 OleDbConnection 字符串无关(这是我最初查看的地方)。


0

该文件可能被另一个进程锁定,您需要按照此文章中所述的方式将其复制,然后加载它。


0

5
Excel interop 不是与 Excel 一起工作的推荐方法。它可能会导致许多问题,因此不应该被推荐使用。 - MaxOvrdrv
虽然这是一篇旧帖子,但我同意MaxOvrdrv的观点,使用Interop不是一个好主意,应该避免使用,即使没有其他原因,因为它需要在服务器上进行完整的Excel安装。 - Lemiarty
你绝对不应该这样做。 - sovemp

0

那个 Excel 文件的扩展名可能不正确。您可以将扩展名从 xls 更改为 xlsx 或反之亦然,然后重试。


0

我在托管的 IIS 网站上遇到过这种情况,很少但是周期性地会出现我之前已经成功解析过的文件出现错误弹窗。简单地重启相应的应用程序池似乎可以解决这个问题。不太确定原因是什么...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接