C#读取excel文件,报“外部表不是预期的格式”的解决办法

有一位同事在做了一个工具,基于asp.net框架,然后在选择文件并打开,读取Excel的文件时报了错,错误提示如下:

C#读取excel文件,报“外部表不是预期的格式”的解决办法_第1张图片

然后同事跟我说在WIN7,Win8的系统上是是没有问题的,只存在赢系统上,一开始我以为是系统不兼容。后来在我的电脑上运行了一下(WIN7),也是提示“外部表不是预期的格式”这个错误。

然后我就在网上找了一些资料,出现这种错误的大多数都是属于这两种情况:

如图1所示,该文件的后缀名是.xls的,但实际上是XML电子表格2003(* XML),并不是标准的.xls的文件。根据网上的方法检测该文件是否为标准的.xls的文件,(用记事本打开的excel文件,如果不是乱码,则该文件是XML代码,如果打开的是乱码,则该文件是是的excel文件),检查后发现那个文件是标准的的excel文件,就先排除了这种可能性。

2,用Microsoft.Jet.OleDb.4.0去解析XLSX的文件,但我打开的文件并不是.XLSX,而是.xls的文件

最后仔细看了一下链接的字符串,发现应该是excel版本的问题,excel连接字符串版本是office2003的,更改为Excel2007版本就可以正常打开文件进行读取数

据了改动的具体代码如下:

using System.Data.OleDb;
using System.Data;

public void ReadExcelFiless()
{
    //string OpenExcelData = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + tB_excel.Text + ";Extended Properties = 'Excel 8.0;HDR=Yes;IMEX=1;'"; 

    //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
    string OpenExcelData = "Provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + Path + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; 
 
            
    string OutputSheet = "Select * From [data$]";
    OleDbCommand ExCommandOut1 = new OleDbCommand(OutputSheet, ExcelConnection);
    OleDbDataAdapter dataAdapterOut1 = new OleDbDataAdapter(ExCommandOut1);
                      

    dataAdapterOut1.Fill(dTableOut1);
    dTableOut1.DefaultView.Sort = dTableOut1.Columns[2].ColumnName + ", " + dTableOut1.Columns[1].ColumnName;                    
    DGV_excel.DataSource = dTableOut1.DefaultView;
    DGV_excel.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;

    dataAdapterOut1.Dispose();
    ExCommandOut1.Dispose();
    ExcelConnection.Close();
    ExcelConnection.Dispose();
}

注:

1,链接的字符串中HDR =Yes,代表的是第一行是标题,并不作为数据使用

2,IMEX有三种模式

        当IMEX = 0时为“汇出模式”,这个模式开启的Excel档案只能用来做“写入”用途。
  当IMEX = 1时为“汇入模式”,这个模式开启的Excel档案只能用来做“读取”用途。
  当IMEX = 2时为“连结模式”,这个模式开启的Excel档案可同时支援“读取”与“写入”用途。

你可能感兴趣的:(C#,VS2010)