C#中NPOI操作excel之读取和写入excel数据

摘要:
=null){sheet=workbook.GetSheetAt;//读取第一个sheet,当然也可以循环读取每个sheetdataTable=newDataTable();if(sheet!=null){introwCount=sheet.LastRowNum;//总行数if{IRowfirstRow=sheet.GetRow;//第一行intcellCount=firstRow.LastCellNum;//列数//构建datatable的列if{startRow=1;//如果第一行是列名,则从第二行开始读取for{cell=firstRow.GetCell;if(cell!=null){column=newDataColumn;dataTable.Columns.Add;}}}}else{for{column=newDataColumn;dataTable.Columns.Add;}}//填充行for{row=sheet.GetRow;ifcontinue;dataRow=dataTable.NewRow();for{cell=row.GetCell;if{dataRow[j]="";}else{//CellTypeswitch{caseCellType.Blank:dataRow[j]="";break;caseCellType.Numeric:shortformat=cell.CellStyle.DataFormat;//对时间格式的处理ifdataRow[j]=cell.DateCellValue;elsedataRow[j]=cell.NumericCellValue;break;caseCellType.String:dataRow[j]=cell.StringCellValue;break;}}}dataTable.Rows.Add;}}}}}returndataTable;}catch{if(fs!

一、下载引用

下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2007版需要此dll)。

二、excel转datatable类

  1. usingSystem;
  2. usingSystem.Data;
  3. usingSystem.IO;
  4. usingNPOI.SS.UserModel;
  5. usingNPOI.XSSF.UserModel;
  6. usingNPOI.HSSF.UserModel;
  7. namespaceNPOIOprateExcel
  8. {
  9. publicclassExcelUtility
  10. {
  11. ///<summary>
  12. ///将excel导入到datatable
  13. ///</summary>
  14. ///<paramname="filePath">excel路径</param>
  15. ///<paramname="isColumnName">第一行是否是列名</param>
  16. ///<returns>返回datatable</returns>
  17. publicstaticDataTableExcelToDataTable(stringfilePath,boolisColumnName)
  18. {
  19. DataTabledataTable=null;
  20. FileStreamfs=null;
  21. DataColumncolumn=null;
  22. DataRowdataRow=null;
  23. IWorkbookworkbook=null;
  24. ISheetsheet=null;
  25. IRowrow=null;
  26. ICellcell=null;
  27. intstartRow=0;
  28. try
  29. {
  30. using(fs=File.OpenRead(filePath))
  31. {
  32. //2007版本
  33. if(filePath.IndexOf(".xlsx")>0)
  34. workbook=newXSSFWorkbook(fs);
  35. //2003版本
  36. elseif(filePath.IndexOf(".xls")>0)
  37. workbook=newHSSFWorkbook(fs);
  38. if(workbook!=null)
  39. {
  40. sheet=workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
  41. dataTable=newDataTable();
  42. if(sheet!=null)
  43. {
  44. introwCount=sheet.LastRowNum;//总行数
  45. if(rowCount>0)
  46. {
  47. IRowfirstRow=sheet.GetRow(0);//第一行
  48. intcellCount=firstRow.LastCellNum;//列数
  49. //构建datatable的列
  50. if(isColumnName)
  51. {
  52. startRow=1;//如果第一行是列名,则从第二行开始读取
  53. for(inti=firstRow.FirstCellNum;i<cellCount;++i)
  54. {
  55. cell=firstRow.GetCell(i);
  56. if(cell!=null)
  57. {
  58. if(cell.StringCellValue!=null)
  59. {
  60. column=newDataColumn(cell.StringCellValue);
  61. dataTable.Columns.Add(column);
  62. }
  63. }
  64. }
  65. }
  66. else
  67. {
  68. for(inti=firstRow.FirstCellNum;i<cellCount;++i)
  69. {
  70. column=newDataColumn("column"+(i+1));
  71. dataTable.Columns.Add(column);
  72. }
  73. }
  74. //填充行
  75. for(inti=startRow;i<=rowCount;++i)
  76. {
  77. row=sheet.GetRow(i);
  78. if(row==null)continue;
  79. dataRow=dataTable.NewRow();
  80. for(intj=row.FirstCellNum;j<cellCount;++j)
  81. {
  82. cell=row.GetCell(j);
  83. if(cell==null)
  84. {
  85. dataRow[j]="";
  86. }
  87. else
  88. {
  89. //CellType(Unknown=-1,Numeric=0,String=1,Formula=2,Blank=3,Boolean=4,Error=5,)
  90. switch(cell.CellType)
  91. {
  92. caseCellType.Blank:
  93. dataRow[j]="";
  94. break;
  95. caseCellType.Numeric:
  96. shortformat=cell.CellStyle.DataFormat;
  97. //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
  98. if(format==14||format==31||format==57||format==58)
  99. dataRow[j]=cell.DateCellValue;
  100. else
  101. dataRow[j]=cell.NumericCellValue;
  102. break;
  103. caseCellType.String:
  104. dataRow[j]=cell.StringCellValue;
  105. break;
  106. }
  107. }
  108. }
  109. dataTable.Rows.Add(dataRow);
  110. }
  111. }
  112. }
  113. }
  114. }
  115. returndataTable;
  116. }
  117. catch(Exception)
  118. {
  119. if(fs!=null)
  120. {
  121. fs.Close();
  122. }
  123. returnnull;
  124. }
  125. }
  126. }
  127. }

三、结果

C#中NPOI操作excel之读取和写入excel数据第1张

四、写入excel类

  1. publicstaticboolDataTableToExcel(DataTabledt)
  2. {
  3. boolresult=false;
  4. IWorkbookworkbook=null;
  5. FileStreamfs=null;
  6. IRowrow=null;
  7. ISheetsheet=null;
  8. ICellcell=null;
  9. try
  10. {
  11. if(dt!=null&&dt.Rows.Count>0)
  12. {
  13. workbook=newHSSFWorkbook();
  14. sheet=workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表
  15. introwCount=dt.Rows.Count;//行数
  16. intcolumnCount=dt.Columns.Count;//列数
  17. //设置列头
  18. row=sheet.CreateRow(0);//excel第一行设为列头
  19. for(intc=0;c<columnCount;c++)
  20. {
  21. cell=row.CreateCell(c);
  22. cell.SetCellValue(dt.Columns[c].ColumnName);
  23. }
  24. //设置每行每列的单元格,
  25. for(inti=0;i<rowCount;i++)
  26. {
  27. row=sheet.CreateRow(i+1);
  28. for(intj=0;j<columnCount;j++)
  29. {
  30. cell=row.CreateCell(j);//excel第二行开始写入数据
  31. cell.SetCellValue(dt.Rows[i][j].ToString());
  32. }
  33. }
  34. using(fs=File.OpenWrite(@"D:/myxls.xls"))
  35. {
  36. workbook.Write(fs);//向打开的这个xls文件中写入数据
  37. result=true;
  38. }
  39. }
  40. returnresult;
  41. }
  42. catch(Exceptionex)
  43. {
  44. if(fs!=null)
  45. {
  46. fs.Close();
  47. }
  48. returnfalse;
  49. }
  50. }

结果如下:

C#中NPOI操作excel之读取和写入excel数据第2张

源码地址:http://download.csdn.net/detail/coderk2014/9328779

免责声明:文章转载自《C#中NPOI操作excel之读取和写入excel数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇《软件构架实践》阅读笔记1MWCNN中使用的haar小波变换 pytorch下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

64位系统下找不到office 32位组件

如果系统式64位的,而装的是32位的office软件,在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Microsoft Excel程序, 这主要是64位系统的问题,excel是32位的组件,所以在正常的系统组件服务里是看不到的 可以通过在运行里面输入 comexp.msc -32 来打开32位的组件服务,在里就能看到excel...

asp.net 调用 excel 组件

Asp.net 如何调用 Excel ? 1.引用 Microsoft.Office.Interop.Excel.dll,自动包装成Interop.Microsoft.Office.Interop.Excel.dll 2.代码: ///<summary> ///生成 excel 报表 ///</summary> privatevoi...

如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件

1.描述 PDF文件是一种便携文件格式,是由Adobe公司所开发的独特的跨平台文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。可移植文档格式,也称为"便携文档格式",是一种电子文件格式。这种文件格式与操作系统平台无关,也就是说,PDF文件...

SQLServer导入Excel,复杂操作

导入Excel 先导入的时候报错了, 提示未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data),去网址下个软件安装就搞定了,有64位和32位的 在数据库点击右键->任务->导入数据 于是出来了导入和导出向导,首先选择数据源,我选的是Microsoft Excel,然后导入Excel文件,点...

C# 连接sql数据库对 access,excel导入导出操作 一、SQL SERVER 和ACCESS的数据导入导出

C# 连接sql数据库对 access,excel导入导出操作一、SQL SERVER 和ACCESS的数据导入导出常规的数据导入导出:使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation○2Services(数据转换服...

ASP.NET用XML的方式导出到excel多sheet的实现方式

private void ToExcel(String FileName) { //要转换的XML文件 DataSet dsBook = new DataSet(); dsBook = new Select().Select_(); int rows = dsBook.Tables[...