您的位置:首页 > 编程语言 > C#

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

2008-04-14 14:31 501 查看
提供两种方法:一个是直接打开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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: