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

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

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):
1、如果用excel软件保存格式为:XML 电子表格 2003(*.xml),是用xml保存,可以用文本编辑器打开。(注意:部分用这个格式导出之后,把后缀名修改为xls,excel软件打开此文件的时候,出现“文件名和扩展名不匹配 ”的提示
2、如果用excel软件保存的xls格式/xlsx格式,是用zip(应该是)压缩包的形式进行保存,用文本编辑器打开是乱码

更新(2017-10-24):
有两种原因会导致报错“外部表不是预期的格式”:
1、用Microsoft.Jet.OleDb.4.0去解析xlsx的文件
2、格式为xls的文件其实是 XML 电子表格 2003(*.xml),不是标准的xls文件

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值