两招C#读取Excel文件

本文介绍了两种C#读取Excel文件的方法。方法一是直接读取单元格,需要注意资源释放;方法二是通过OleDb连接,将Excel作为数据源,可以使用Dataset填充或OleDbDataReader逐行读取。针对混合型字段可能出现的null值问题,可以通过修改连接字符串中的Imex=1来将混合型数据作为文本读取,避免null值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

C#读取Excel文件方法一:直接读取(这种直接读取单元格的方法释放很重要)

 
 
  1. Excel.Applicationexcel=null;
  2. Excel.Workbookswbs=null;
  3. Excel.Workbookwb=null;
  4. Excel.Worksheetws=null;
  5. Excel.Rangerange1=null;
  6. objectNothing=System.Reflection.Missing.Value;
  7. try
  8. {
  9. excel=newExcel.Application();
  10. excel.UserControl=true;
  11. excel.DisplayAlerts=false;
  12. excel.Application.Workbooks.Open(this.
  13. FilePath,Nothing,Nothing,Nothing,Nothing,
  14. Nothing,Nothing,Nothing,Nothing,Nothing,
  15. Nothing,Nothing,Nothing);
  16. wbs=excel.Workbooks;
  17. wb=wbs[1];
  18. ws=(Excel.Worksheet)wb.Worksheets["Sheet2"];
  19. introwCount=ws.UsedRange.Rows.Count;
  20. intcolCount=ws.UsedRange.Columns.Count;
  21. if(rowCount<=0)
  22. thrownewInvalidFormatException
  23. ("文件中没有数据记录");
  24. if(colCount<4)
  25. thrownewInvalidFormatException
  26. ("字段个数不对");
  27. for(inti=0;i{
  28. this.rowNo=i+1;
  29. object[]row=newobject[4];
  30. for(intj=0;j<4;j++)
  31. {
  32. range1=ws.get_Range(ws.Cells[i+2,j+1],
  33. ws.Cells[i+2,j+1]);
  34. row[j]=range1.Value;
  35. if(row[0]==null)
  36. {
  37. this.isNullRecord++;
  38. break;
  39. }
  40. }
  41. if(this.isNullRecord>0)
  42. continue;
  43. DataRowdataRow=this.readExcel(row);
  44. if(this.isNullRecord==1)
  45. continue;
  46. if(this.verifyData(dataRow)==false)
  47. errFlag++;
  48. this.updateTableCurr(dataRow);
  49. }
  50. }
  51. finally
  52. {
  53. if(excel!=null)
  54. {
  55. if(wbs!=null)
  56. {
  57. if(wb!=null)
  58. {
  59. if(ws!=null)
  60. {
  61. if(range1!=null)
  62. {
  63. System.Runtime.InteropServices.Marshal.
  64. ReleaseComObject(range1);
  65. range1=null;
  66. }
  67. System.Runtime.InteropServices.Marshal.
  68. ReleaseComObject(ws);
  69. ws=null;
  70. }
  71. wb.Close(false,Nothing,Nothing);
  72. System.Runtime.InteropServices.Marshal.
  73. ReleaseComObject(wb);
  74. wb=null;
  75. }
  76. wbs.Close();
  77. System.Runtime.InteropServices.Marshal.
  78. ReleaseComObject(wbs);
  79. wbs=null;
  80. }
  81. excel.Application.Workbooks.Close();
  82. excel.Quit();
  83. System.Runtime.InteropServices.Marshal.
  84. ReleaseComObject(excel);
  85. excel=null;
  86. GC.Collect();
  87. }
  88. }

C#读取Excel文件方法二:通过OleDb连接,把excel文件作为数据源来读取(这里是fill进dataset,也可以返回OleDbDataReader来逐行读,数据较快)

注:这种方法容易把混合型的字段作为null值读取进来,解决办法是改造连接字符串

 
 
  1. strConn = "Provider=Microsoft.Jet.
  2. OLEDB.4.0;Data Source=C:\\Erp1912.xls;Extended
  3. Properties='Excel8.0;HDR=Yes;IMEX=1'";

通过Imex=1来把混合型作为文本型读取,避免null值,来实现C#读取Excel文件

 
 
  1. privateDataSetimportExcelToDataSet
  2. (stringFilePath)
  3. {
  4. stringstrConn;
  5. strConn="Provider=Microsoft.Jet.
  6. OLEDB.4.0;"+"DataSource="+FilePath+";
  7. ExtendedProperties=Excel8.0;";
  8. OleDbConnectionconn=newOleDbConnection
  9. (strConn);
  10. OleDbDataAdaptermyCommand=newOleDbDataAdapter
  11. ("SELECT*FROM[Sheet1$]",strConn);
  12. DataSetmyDataSet=newDataSet();
  13. try
  14. {
  15. myCommand.Fill(myDataSet);
  16. }
  17. catch(Exceptionex)
  18. {
  19. thrownewInvalidFormatException
  20. ("该Excel文件的工作表的名字不正确,"+ex.Message);
  21. }
  22. returnmyDataSet;
  23. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值