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文件