700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【C#】使用OleDb读取Excel出现“外部表不是预期的格式。”

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

时间:2019-01-14 18:22:11

相关推荐

【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档案可同时支援“读取”与“写入”用途。

解决办法:

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

//这两种连接是不一样的string OpenExcelData = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + tB_excel.Text + ";Extended Properties = 'Excel 8.0;HDR=Yes;IMEX=1;'"; //此连接可以操作.xls与.xlsx文件 (支持Excel 和 Excel 的连接字符串)string OpenExcelData = "Provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + Path + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。