1、网上找了很多方法,很多都是因为读取xls和xlsx的方法连接不一样。这个我在程序已经有进行判断进行修改。

(解决连接1: )


(解决连接2: )



2、上面解决连接2,有一段文字引起了我的注意,就是:


用记事本打开你的excel文件,看看显示是否为乱码。


若是乱码,我这边测试是不会提示这个错误的,可以成功导入。


若是html代码,则表示你的excel文件格式不是标准的excel格式,才会提示“外部表不是预期的格式”的错误;


然后我用记事本打开我的excel文件,发现是xml代码,说明我的文档不是标准的格式,不能用内置的open方法打开。



3、看到另外一个blog( 连接),里面说,是把文件转换为标准的格式,然后再读取那个临时文件。(文章里面的excelhelper没有找到对应的方法)



4、于是,我在google搜索了一下关于“xml转换为excel标准格式”,终于让我找到一个方法( 连接):


public static void ConvertExcel(string savePath)
    {
        //将xml文件转换为标准的Excel格式 
        Object Nothing = Missing.Value;//由于yongCOM组件很多值需要用Missing.Value代替   
        Excel.Application ExclApp = new Excel.ApplicationClass();// 初始化
        Excel.Workbook ExclDoc = ExclApp.Workbooks.Open(savePath, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);//打开Excl工作薄   
        try
        {
            Object format = Excel.XlFileFormat.xlWorkbookNormal;//获取Excl 2007文件格式   
            ExclApp.DisplayAlerts = false;
            ExclDoc.SaveAs(savePath, format, Nothing, Nothing, Nothing, Nothing, Excel.XlSaveAsAccessMode.xlExclusive, Nothing, Nothing, Nothing, Nothing, Nothing);//保存为Excl 2007格式   
        }
        catch (Exception ex) { }
        ExclDoc.Close(Nothing, Nothing, Nothing);
        ExclApp.Quit();
}


直接把你文件的路径传入,就可以转为标准的excel文档,就可以正常的读取了。(如果你不想修改源文件,可以在传入另外一个路径,进行保存为临时文件)



更新(2017-10-23):


”的提示)


2、如果用excel软件保存的xls格式/xlsx格式,是用zip(应该是)压缩包的形式进行保存,用文本编辑器打开是乱码



更新(2017-10-24):


有两种原因会导致报错“外部表不是预期的格式”:


1、用Microsoft.Jet.OleDb.4.0去解析xlsx的文件


XML 电子表格 2003(*.xml),不是标准的xls文件