Excel操作

  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Data;
  4. usingSystem.IO;
  5. usingSystem.Text;
  6. usingSystem.Web;
  7. usingNPOI;
  8. usingNPOI.HPSF;
  9. usingNPOI.HSSF;
  10. usingNPOI.HSSF.UserModel;
  11. usingNPOI.HSSF.Util;
  12. usingNPOI.POIFS;
  13. usingNPOI.Util;
  14. usingNPOI.SS.UserModel;
  15. usingNPOI.SS.Util;
  16. namespaceXXXX.Common
  17. {
  18. ///<summary>
  19. ///Excel操作
  20. ///</summary>
  21. publicclassExcelHelper
  22. {
  23. ///<summary>
  24. ///DataTable导出到Excel的MemoryStream
  25. ///</summary>
  26. ///<paramname="dtSource">源DataTable</param>
  27. ///<paramname="strHeaderText">表头文本</param>
  28. publicstaticMemoryStreamGetExcelStream(DataTabledtSource,stringstrHeaderText)
  29. {
  30. HSSFWorkbookworkbook=newHSSFWorkbook();
  31. ISheetsheet=workbook.CreateSheet();
  32. #region右击文件属性信息
  33. {
  34. DocumentSummaryInformationdsi=PropertySetFactory.CreateDocumentSummaryInformation();
  35. dsi.Company="";
  36. workbook.DocumentSummaryInformation=dsi;
  37. SummaryInformationsi=PropertySetFactory.CreateSummaryInformation();
  38. si.Author="";//填加xls文件作者信息
  39. si.ApplicationName="";//填加xls文件创建程序信息
  40. si.LastAuthor="";//填加xls文件最后保存者信息
  41. si.Comments="";//填加xls文件作者信息
  42. si.Title="";//填加xls文件标题信息
  43. si.Subject="";//填加文件主题信息
  44. si.CreateDateTime=DateTime.Now;
  45. workbook.SummaryInformation=si;
  46. }
  47. #endregion
  48. ICellStyledateStyle=workbook.CreateCellStyle();
  49. IDataFormatformat=workbook.CreateDataFormat();
  50. dateStyle.DataFormat=format.GetFormat("yyyy-mm-dd");
  51. //取得列宽
  52. int[]arrColWidth=newint[dtSource.Columns.Count];
  53. foreach(DataColumnitemindtSource.Columns)
  54. {
  55. arrColWidth[item.Ordinal]=Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
  56. }
  57. for(inti=0;i<dtSource.Rows.Count;i++)
  58. {
  59. for(intj=0;j<dtSource.Columns.Count;j++)
  60. {
  61. intintTemp=Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
  62. if(intTemp>arrColWidth[j])
  63. {
  64. arrColWidth[j]=intTemp;
  65. }
  66. }
  67. }
  68. introwIndex=0;
  69. foreach(DataRowrowindtSource.Rows)
  70. {
  71. #region新建表,填充表头,填充列头,样式
  72. if(rowIndex==65535||rowIndex==0)
  73. {
  74. if(rowIndex!=0)
  75. {
  76. sheet=workbook.CreateSheet();
  77. }
  78. #region表头及样式
  79. if(!string.IsNullOrEmpty(strHeaderText))
  80. {
  81. IRowheaderRow=sheet.CreateRow(0);
  82. headerRow.HeightInPoints=25;
  83. headerRow.CreateCell(0).SetCellValue(strHeaderText);
  84. ICellStyleheadStyle=workbook.CreateCellStyle();
  85. headStyle.Alignment=HorizontalAlignment.CENTER;
  86. IFontfont=workbook.CreateFont();
  87. font.FontHeightInPoints=20;
  88. font.Boldweight=700;
  89. headStyle.SetFont(font);
  90. headerRow.GetCell(0).CellStyle=headStyle;
  91. sheet.AddMergedRegion(newCellRangeAddress(0,0,0,dtSource.Columns.Count-1));
  92. }
  93. #endregion
  94. #region列头及样式
  95. {
  96. IRowheaderRow=sheet.CreateRow(1);
  97. ICellStyleheadStyle=workbook.CreateCellStyle();
  98. headStyle.Alignment=HorizontalAlignment.CENTER;
  99. IFontfont=workbook.CreateFont();
  100. font.FontHeightInPoints=10;
  101. font.Boldweight=700;
  102. headStyle.SetFont(font);
  103. foreach(DataColumncolumnindtSource.Columns)
  104. {
  105. headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
  106. headerRow.GetCell(column.Ordinal).CellStyle=headStyle;
  107. //设置列宽
  108. sheet.SetColumnWidth(column.Ordinal,(arrColWidth[column.Ordinal]+1)*256);
  109. }
  110. }
  111. #endregion
  112. rowIndex=2;
  113. }
  114. #endregion
  115. #region填充内容
  116. IRowdataRow=sheet.CreateRow(rowIndex);
  117. foreach(DataColumncolumnindtSource.Columns)
  118. {
  119. ICellnewCell=dataRow.CreateCell(column.Ordinal);
  120. stringdrValue=row[column].ToString();
  121. switch(column.DataType.ToString())
  122. {
  123. case"System.String"://字符串类型
  124. newCell.SetCellValue(drValue);
  125. break;
  126. case"System.DateTime"://日期类型
  127. DateTimedateV;
  128. DateTime.TryParse(drValue,outdateV);
  129. newCell.SetCellValue(dateV);
  130. newCell.CellStyle=dateStyle;//格式化显示
  131. break;
  132. case"System.Boolean"://布尔型
  133. boolboolV=false;
  134. bool.TryParse(drValue,outboolV);
  135. newCell.SetCellValue(boolV);
  136. break;
  137. case"System.Int16"://整型
  138. case"System.Int32":
  139. case"System.Int64":
  140. case"System.Byte":
  141. intintV=0;
  142. int.TryParse(drValue,outintV);
  143. newCell.SetCellValue(intV);
  144. break;
  145. case"System.Decimal"://浮点型
  146. case"System.Double":
  147. doubledoubV=0;
  148. double.TryParse(drValue,outdoubV);
  149. newCell.SetCellValue(doubV);
  150. break;
  151. case"System.DBNull"://空值处理
  152. newCell.SetCellValue("");
  153. break;
  154. default:
  155. newCell.SetCellValue("");
  156. break;
  157. }
  158. }
  159. #endregion
  160. rowIndex++;
  161. }
  162. using(MemoryStreamms=newMemoryStream())
  163. {
  164. workbook.Write(ms);
  165. ms.Flush();
  166. ms.Position=0;
  167. workbook.Dispose();
  168. returnms;
  169. }
  170. }
  171. ///<summary>
  172. ///导出Excel
  173. ///</summary>
  174. ///<paramname="dtSource">源DataTable</param>
  175. ///<paramname="strHeaderText">表头文本</param>
  176. ///<paramname="strFileName">文件名</param>
  177. publicstaticvoidExport(DataTabledtSource,stringstrHeaderText,stringstrFileName)
  178. {
  179. HttpContextcurContext=HttpContext.Current;
  180. //设置编码和附件格式
  181. curContext.Response.ContentType="application/vnd.ms-excel";
  182. curContext.Response.ContentEncoding=Encoding.UTF8;
  183. curContext.Response.Charset="UTF-8";
  184. if(curContext.Request.ServerVariables["HTTP_USER_AGENT"].IndexOf("Firefox")>-1)
  185. {
  186. curContext.Response.AddHeader("Content-Disposition","attachment;FileName="+strFileName);
  187. }
  188. else
  189. {
  190. curContext.Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(strFileName,Encoding.UTF8));
  191. }
  192. curContext.Response.BinaryWrite(GetExcelStream(dtSource,strHeaderText).GetBuffer());
  193. curContext.Response.End();
  194. }
  195. ///<summary>
  196. ///读取excel
  197. ///默认第一行为标头
  198. ///</summary>
  199. ///<paramname="strFileName">excel文档路径</param>
  200. ///<returns></returns>
  201. publicstaticDataTableImport(stringstrFileName)
  202. {
  203. DataTabledt=newDataTable();
  204. HSSFWorkbookhssfworkbook;
  205. using(FileStreamfile=newFileStream(strFileName,FileMode.Open,FileAccess.Read))
  206. {
  207. hssfworkbook=newHSSFWorkbook(file);
  208. }
  209. ISheetsheet=hssfworkbook.GetSheetAt(0);
  210. System.Collections.IEnumeratorrows=sheet.GetRowEnumerator();
  211. IRowheaderRow=sheet.GetRow(0);
  212. intcellCount=headerRow.LastCellNum;
  213. for(intj=0;j<cellCount;j++)
  214. {
  215. ICellcell=headerRow.GetCell(j);
  216. dt.Columns.Add(cell.ToString());
  217. }
  218. for(inti=(sheet.FirstRowNum+1);i<=sheet.LastRowNum;i++)
  219. {
  220. IRowrow=sheet.GetRow(i);
  221. DataRowdataRow=dt.NewRow();
  222. for(intj=row.FirstCellNum;j<cellCount;j++)
  223. {
  224. if(row.GetCell(j)!=null)
  225. dataRow[j]=row.GetCell(j).ToString();
  226. }
  227. dt.Rows.Add(dataRow);
  228. }
  229. returndt;
  230. }
  231. }
  232. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值