C#读取Excel的三种方式以及比较分析

2019-12-30 11:04:22王冬梅
  • OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);  myData.Fill(ds, tableName);//填充数据 
  • objConn.Close();  //dtExcel即为excel文件中指定表中存储的信息 
  • dtExcel = ds.Tables[tableName];  return dtExcel; 
  • }  catch 
  • {  return null; 
  • }  } 

    下面说明一下连接字符串

    HDR=Yes,这代表第一行是标题,不做为数据使用(但是我在实际使用中,如果第一行存在复杂数值,那么读取得到的Datatable列标题会自动设置为F1、F2等方式命名,与实际应用不符,所以当时是通过HDR=No方式将所有内容读取到Datatable中,然后手动将第一行设置成标题的);IMEX ( IMport EXport mode )设置

    IMEX 有三种模式:

    0 is Export mode

    1 is Import mode

    2 is Linked mode (full update capabilities)

    我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:

    当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。

    当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。

    当 IMEX=2 时为“链接模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

    ---------------------------------

    另外,读取Excel2007版本的文件时,版本应该从8.0改为12.0,同时驱动不能再用Jet,而应该用ACE。负责会造成“找不到可安装的 ISAM”的错误。

    ---------------------------------

    在网上还发现采用这种方式存在取出的Sheet表的个数多于实际Excel表中的Sheet表个数的情况,其原因有二:

    1. 取出的名称中,包括了XL命名管理器中的名称(参见XL2007的公式--命名管理器, 快捷键Crtl+F3);