ExcelHandler.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.IO;
  2. using System.Data;
  3. using System;
  4. using NPOI.HSSF.UserModel;
  5. using NPOI.SS.UserModel;
  6. namespace 优软MES.DataOperate
  7. {
  8. class ExcelHandler
  9. {
  10. DataHelper dh = new DataHelper();
  11. /// <summary>
  12. /// 导出Excel
  13. /// </summary
  14. public void ExportExcel(DataTable dt,string FolderPath) {
  15. //创建一个内存流,用来接收转换成Excel的内容
  16. MemoryStream ms;
  17. ms = DataTableToExcel(dt);
  18. //以系统当前时间命名文件,FileMode.Create表示创建文件,FileAccess.Write表示拥有写的权限
  19. FileStream fs = new FileStream(@FolderPath+"\\"+DateTime.Now.ToString("yyyyMMddHHmmss") +".xls", FileMode.Create, FileAccess.Write);
  20. byte[] data = ms.ToArray();
  21. fs.Write(data, 0, data.Length);
  22. fs.Flush();
  23. //释放当前Excel文件,否则打开文件的时候会显示文件被占用
  24. ms.Dispose();
  25. fs.Dispose();
  26. }
  27. /// <summary>
  28. /// 导入Excel
  29. /// </summary>
  30. public void ImportExcel(DataTable DataTable, string TableName) {
  31. }
  32. /// <summary>
  33. /// 将DataTable形式的数据转成Excel格式的,然后用字节流的形式写入文件
  34. /// </summary>
  35. /// <param name="DataTable"></param>
  36. /// <returns></returns>
  37. public MemoryStream DataTableToExcel(DataTable DataTable) {
  38. //创建内存流
  39. MemoryStream ms=new MemoryStream();
  40. //创建一个Book,相当于一个Excel文件
  41. HSSFWorkbook book = new HSSFWorkbook();
  42. //Excel中的Sheet
  43. ISheet sheet = book.CreateSheet("sheet1");
  44. //获取行数量和列数量
  45. int rowNum = DataTable.Rows.Count;
  46. int columnNum = DataTable.Columns.Count;
  47. //设置列的宽度,根据首行的列的内容的长度来设置
  48. for (int i=0;i<columnNum;i++) {
  49. int dataLength = DataTable.Rows[0][i].ToString().Length;
  50. if (dataLength <= 3)
  51. {
  52. sheet.SetColumnWidth(i, dataLength * 1200);
  53. }
  54. else {
  55. sheet.SetColumnWidth(i, dataLength * 400);
  56. }
  57. }
  58. //将DataTable的值循环赋值给book,Aligment设置居中
  59. for (int i = 0; i < rowNum; i++) {
  60. IRow row = sheet.CreateRow(i);
  61. row.HeightInPoints = 20;
  62. for (int j = 0; j < columnNum; j++) {
  63. row.CreateCell(j).SetCellValue(DataTable.Rows[i][j].ToString());
  64. row.GetCell(j).CellStyle.Alignment = HorizontalAlignment.CENTER;
  65. }
  66. }
  67. //将book的内容写入内存流中返回
  68. book.Write(ms);
  69. return ms;
  70. }
  71. }
  72. }