Excel"外部表格不是预期的格式".

Sis*_*utl 160 c# excel-2007 xlsx import-from-excel

我正在尝试使用下面显示的代码读取Excel(xlsx)文件.我得到一个"外部表不是预期的格式." 错误,除非我已在Excel中打开该文件.换句话说,我必须首先在Excel中打开文件,然后才能从我的C#程序中读取.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);
}
Run Code Online (Sandbox Code Playgroud)

FAt*_*oon 240

"外部表格不符合预期格式." 通常在尝试使用具有以下连接字符串的Excel 2007文件时发生:Microsoft.Jet.OLEDB.4.0和扩展属性= Excel 8.0

使用以下连接字符串似乎可以解决大多数问题.

public static string path = @"C:\src\RedirectApplication\RedirectApplication\301s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
Run Code Online (Sandbox Code Playgroud)

  • 这可能是令人难以置信的,但我只是将工作表名称更改为全部小写并使用sheet1 $ (11认同)
  • 具有讽刺意味的是,我从其他人的应用程序(Scribe)收到此错误,但解释仍然解决了我的问题:"另存为"Excel 97-2003,并修复了错误. (10认同)
  • .xlsx或.xls扩展名? (4认同)
  • 您可能必须先安装它:http://www.microsoft.com/en-us/download/confirmation.aspx?id = 233734 (3认同)
  • 我正在使用LinqToExcel,要让LinqToExcel使用该查询字符串,我必须将文件重命名为xlsx.有问题的电子表格确实是一个excel 97电子表格,但odbc提供商似乎并不关心这一点.一旦我使用正确的查询字符串欺骗LinqToExcel,提供者显然确定如何独立于文件的扩展名读取文件.在我的情况下方便的漏洞. (3认同)

小智 24

谢谢你的代码:)我真的很感激.适合我.

public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
Run Code Online (Sandbox Code Playgroud)

因此,如果您有Excel文件的差异版本,请获取文件名,如果其扩展名为.xlsx,请使用以下命令:

Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
Run Code Online (Sandbox Code Playgroud)

如果是.xls,请使用:

Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考:如果您尝试在没有安装**Jet**OleDb的PC上打开`.xls`文件,则会抛出OleDbException. (5认同)

ced*_*lof 14

(我的评论声誉太低,但这是对JoshCaba的参赛作品的评论,使用Ace-engine代替Jet for Excel 2007)

如果您的计算机上没有安装/注册Ace,可以访问:http://www.microsoft.com/downloads/details.aspx? FamilyID = 7554F536-8C28-4598-9B72-EF94E038C891&displaylang = en

它也适用于Excel 2010.


Joe*_*ing 8

只需添加我的案例.我的xls文件是由网站的数据导出功能创建的,文件扩展名是xls,它可以通常由MS Excel 2003打开.但是Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0都得到了"外部表格不是预期的格式"异常.

最后,问题是,正如例外所说,"它不是预期的格式".虽然它的扩展名是xls,但是当我用文本编辑器打开它时,它实际上是一个格式良好的html文件,所有数据都在<table>中,每个<tr>是一行,每个<td>是一个细胞.然后我想我可以用HTML方式解析它.


小智 6

我有同样的问题。使用以下步骤解决:

1.) 单击文件

2.) 选择“另存为”

3.) 单击下拉菜单(另存为类型)

在此输入图像描述

4.) 选择 Excel 97-2003 工作簿

在此输入图像描述

5.) 单击“保存”按钮

在此输入图像描述

  • 嘘!恢复到过时的文件格式甚至不应该被考虑。在回答这个问题时,97-2003 格式已有 16 年历史,已经过时 12 年了。我可以理解几年,但十多年的过时不应该向专业开发人员表明文件格式需要更旧。 (2认同)