C#中Excel文件的读取的两种方法:Excel类和OleDb

提供两种方法:一个是直接打开excel文件,然后逐行读取,速度较慢;还有一种方法是通过OleDb连接,把excel文件作为数据源来读取
l}F"l cN!H0
方法一:这种直接读取单元格的方法释放很重要。
-ENGc+vR0   Excel.Application excel = null;
WP_n+d KL0   Excel.Workbooks wbs = null; 大风车社区门户-多媒体互动英语交流平台KR#q2Ee.w0j4Fb1d
   Excel.Workbook wb = null;
)`9h'V.?2N#/5fN0   Excel.Worksheet ws = null; 大风车社区门户-多媒体互动英语交流平台3zM(} XU'c[Q?_
   Excel.Range range1 = null; 大风车社区门户-多媒体互动英语交流平台Z:^M3iq:N:r
   object Nothing = System.Reflection.Missing.Value;
"mrmmIW0    
@ KH/Ij e|!oW0   try
5o TmI"Mf6W0   { 大风车社区门户-多媒体互动英语交流平台j'lW;a6H.g0/8~?
    excel = new Excel.Application(); 大风车社区门户-多媒体互动英语交流平台~M Yj"d6J3i3L0W
    excel.UserControl = true; 大风车社区门户-多媒体互动英语交流平台-T(s7f4F b[T'l
    excel.DisplayAlerts = false; 大风车社区门户-多媒体互动英语交流平台WKR mu
                     大风车社区门户-多媒体互动英语交流平台/?(^D OrSC"xo
    excel.Application.Workbooks.Open(this.FilePath,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing ) ;
v6J0`%qM6hcf0    
p _^Q*n1i3M0v)I9eF#H5Ja0    wbs = excel.Workbooks;
c9lV](P/a t0    wb = wbs[1]; 大风车社区门户-多媒体互动英语交流平台(I6vc^,C&o1`u
    ws = (Excel.Worksheet)wb.Worksheets["Sheet2"]; 大风车社区门户-多媒体互动英语交流平台!m4zrf2lj
    
rt+iQ Z;e%Ok,SM0          
2A YX B'`Q0    int rowCount = ws.UsedRange.Rows.Count; 大风车社区门户-多媒体互动英语交流平台,zHI _3?r;@v
    int colCount = ws.UsedRange.Columns.Count;
b#VCq_9zm0    if (rowCount <= 0) 大风车社区门户-多媒体互动英语交流平台 X ~dN9W0]4B*h
     throw new InvalidFormatException("文件中没有数据记录"); 大风车社区门户-多媒体互动英语交流平台w"pVH"UKF4i
    if (colCount < 4 )
,q2c} X&?B _"v0     throw new InvalidFormatException("字段个数不对"); 大风车社区门户-多媒体互动英语交流平台*L3WOS"bc
     大风车社区门户-多媒体互动英语交流平台|j"KP/`/^8ry5p
    for (int i = 0;i<colCount ;i++) 大风车社区门户-多媒体互动英语交流平台:fSY(T3n]2vO
    { 大风车社区门户-多媒体互动英语交流平台2@C;P7DB8h
     this.rowNo = i + 1;
!D t5D&@E0     object[] row = new object[4];
{:i2zM b#KF gt)QW0     for (int j = 0;j<4;j++)
_} P*j}0WE dZ-r0     {
/!MF"l3RT8P?mY'H0      range1 = ws.get_Range(ws.Cells[i+2,j+1],ws.Cells[i+2,j+1]);
FhaF;L0Yy0      row[j] = range1.Value;
^s(P6o7o5H0      if (row[0] == null)
hK:U Z}:`2p0      {
v,yNtX0       this.isNullRecord++;
;Ow-z'N+p$_@'y0       break;
@(G6u6sTn0      }
wV/l"ttzc7zu c0     }
1gj;~5Mx0S.fy0                     大风车社区门户-多媒体互动英语交流平台:{;gj]5F7A8r
     if (this.isNullRecord > 0)
d0r$w)}%]a'h/E0      continue;
.@6`7a/A/?_ z l'I0     DataRow dataRow = this.readExcel(row); 大风车社区门户-多媒体互动英语交流平台2PSo?X0x v6c&LL
     if (this.isNullRecord == 1)
yhU5[J'pV [M0      continue; 大风车社区门户-多媒体互动英语交流平台2j"R:n8|V#G%u
   大风车社区门户-多媒体互动英语交流平台*xin@J,q2W
     if (this.verifyData(dataRow) == false)
7~Xc4m"G M7~5X0      errFlag++; 大风车社区门户-多媒体互动英语交流平台|g[(Y$@h*d
  
{3CW9H6Jv0     this.updateTableCurr(dataRow); 大风车社区门户-多媒体互动英语交流平台mU8C/hgk*t
    } 大风车社区门户-多媒体互动英语交流平台Ou Q|:f{2l
    
#s+a%qH0b^0   }
}d5Pk:q0   finally 大风车社区门户-多媒体互动英语交流平台)G-o,Ld4]-v,h3p_i7H0X
   {
%m/zpM Y+W Z2wz0    if (excel != null) 大风车社区门户-多媒体互动英语交流平台"`KFv c5Hf
    { 大风车社区门户-多媒体互动英语交流平台9gXAe9@ B#|
     if (wbs != null) 大风车社区门户-多媒体互动英语交流平台ED8n?9R"^HW:kC |5C/
     { 大风车社区门户-多媒体互动英语交流平台@1c*sq6~UL
      if (wb != null)
fzG.wfc0      {
}dU G`%WICRh/w0       if (ws != null)
S ^6WS g4D`c4X A0       {
Au}u ES o5NA0        if (range1 != null)
w5`'O9I7wN5fM0        {
3z xz9k/.^*F0         System.Runtime.InteropServices.Marshal.ReleaseComObject(range1); 大风车社区门户-多媒体互动英语交流平台o$HFB8R Rh2SW
         range1 = null;
zTv%?T2G0        } 大风车社区门户-多媒体互动英语交流平台&Q(a} xO#Wp
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ws); 大风车社区门户-多媒体互动英语交流平台PY$X^be)q
        ws = null; 大风车社区门户-多媒体互动英语交流平台6Si!RF0A!Om7/
       } 大风车社区门户-多媒体互动英语交流平台2W1l G*I.F)H
       wb.Close(false,Nothing,Nothing);  
(V"C*hXk$dV0       System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); 大风车社区门户-多媒体互动英语交流平台'sK4} ]5O/
       wb = null;
&k;T;@uO H#QGZ0      } 大风车社区门户-多媒体互动英语交流平台!_Skp5bC
      wbs.Close();
/WV3l-bxM)Hsb0      System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs); 大风车社区门户-多媒体互动英语交流平台&w pN+X u
      wbs = null;
_6s#xF+{h }*v'j$?km g0     }
x1VL5SZ2q/^_0     excel.Application.Workbooks.Close();
;@,~ N(f9Yu$G O2I0     excel.Quit(); 大风车社区门户-多媒体互动英语交流平台o-@9B2k,e7Z
     System.Runtime.InteropServices.Marshal.ReleaseComObject(excel); 大风车社区门户-多媒体互动英语交流平台'g/FAP
     excel = null; 大风车社区门户-多媒体互动英语交流平台"SwN7_?,?
     GC.Collect(); 大风车社区门户-多媒体互动英语交流平台 UP'WA%k&jt*X
    }
~| Ii+G+YYT0   }
~zEWe+UB0方法二:这里是fill进dataset,也可以返回OleDbDataReader来逐行读,数据较快
/B[9|s| K]2X"k)M0注:这种方法容易把混合型的字段作为null值读取进来,解决办法是改造连接字符串
3}.}hot k5^%U0strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C://Erp1912.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
/u!p'W1k ge2}@0通过Imex=1来把混合型作为文本型读取,避免null值
Q)a @}M!L;j0private DataSet importExcelToDataSet(string FilePath) 大风车社区门户-多媒体互动英语交流平台WU?Zc4Cp)d
  {
%MD(b n ^gF/O }0   string strConn;
.R}P4Av-gA?0N0   strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FilePath + ";Extended Properties=Excel 8.0;";
&^Nf[6su0   OleDbConnection conn = new OleDbConnection(strConn);
h3j+hT#A3A;Q1Z?n4^0   OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",strConn); 大风车社区门户-多媒体互动英语交流平台V N` zC|ym
   DataSet myDataSet = new DataSet();
8a2k1q(k}[0   try 大风车社区门户-多媒体互动英语交流平台QE9v)l |z
   { 大风车社区门户-多媒体互动英语交流平台7bQB0Q5s!z/s%S
    myCommand.Fill(myDataSet); 大风车社区门户-多媒体互动英语交流平台A+F%qXn"cq
   }
!yb/Q9x0   catch(Exception ex)
| D8io3A0   {
WJ J)[8/&[0    throw new InvalidFormatException("该Excel文件的工作表的名字不正确," + ex.Message); 大风车社区门户-多媒体互动英语交流平台]r*C cas?7Q
   } 大风车社区门户-多媒体互动英语交流平台 i Uk^$J
   return myDataSet; 大风车社区门户-多媒体互动英语交流平台} f"V,? UQ:e
  } 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值