【C#】使用OleDb读取Excel出现“外部表不是预期的格式。”

在C#使用OleDb读取Excel表格数据时,出现外部表不是预期的格式这个提示
在这里插入图片描述

这个问题就很奇怪,打开表格执行程序就正常,不打开表格执行就报错,搜索了一下解决办法,总过差不多有以下几种解决办法。

代码如下:

private void bind(string fileName)  
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + fileName + ";" +
                    "Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'";
            OleDbDataAdapter da = new OleDbDataAdapter("SELECT *  FROM [sheet1$]", strConn);
            DataSet ds = new DataSet();
            try
            {
                da.Fill(ds);
                dt = ds.Tables[0];
                this.dataGridView1.DataSource = dt;
            }
            catch (Exception err)
            {
                MessageBox.Show("操作失败!" + err.ToString());
            }
        }

参数解释:

HDR=Yes/No
可选参数,指定 Excel 表的第一行是否列名,缺省为 Yes,可以在注册表中修改缺省的行为。
“HDR =Yes;” 表示第一行包含列名,而不是数据。“HDR =No;” 表明相反;

IMEX=1
可选参数,将 Excel 表中混合 Intermixed 数据类型的列强制解析为文本。
当IMEX = 0时为“汇出模式”,这个模式开启的Excel档案只能用来做“写入”用途。
当IMEX = 1时为“汇入模式”,这个模式开启的Excel档案只能用来做“读取”用途。
当IMEX = 2时为“连结模式”,这个模式开启的Excel档案可同时支援“读取”与“写入”用途。

解决办法:

  1. 不是标准的excel表。该文件的后缀名是.xls的,但实际上是XML电子表格2003(* XML),并不是标准的.xls的文件。根据网上的方法检测该文件是否为标准的.xls的文件,用记事本打开的excel文件,如果不是乱码,则该文件是XML代码,如果打开的是乱码,则该文件是excel文件。
  2. 如果表格打开时可以正常执行,打不开执行程序时报错,可以先判断文件是否打开,如果文件没有打开,则自动打开。这个判断比较笨,但是也算是个无奈之举,判断文件是否打开方法:链接: https://blog.csdn.net/weixin_38211198/article/details/90600126.
  3. 用网上的一个ExcelHelper类包.通过试验发现一个解决办法,ExcelHelper提供了通过模板来创建新excel文件的功能,我们给它设置一个格式正确的xxx.xls文件,再指定保存路径,导出数据为xls文件即可。
  4. 是EXCEL格式的问题,应该定位一下问题出在哪,看一下具体错误信息或出错现场信息。或者不使用OLE导入,直接以读取EXCEL单元格的形式导入。以单元格形式导入,虽然效率差一些,但可以非常有效地避免空行、空列、列内容类型多内容读不进去(列内容有纯数字或纯字母内容时)的问题。
  5. 用Microsoft.Jet.OleDb.4.0去解析XLSX的文件,但我打开的文件并不是.XLSX,而是.xls的文件最后仔细看了一下链接的字符串,发现应该是excel版本的问题,excel连接字符串版本是office2003的,更改为Excel2007版本就可以正常打开文件进行读取数。
//这两种连接是不一样的
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'"; 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值