C#使用NOPI生成excel要点记载

  很久没动手写博客了,最近由于公司比较忙,接触了不同类容,对自己的技术和业务理解有了更深入的理解。今天有点小空,将前段时间所运用到的一些知识点记录下来。

  由于公司业务需要统计一些数据,所以对于我们来说,最后是整一个报表,免得随时都来找你导出数据,还需要写SQL,上服务器,导出数据,特别麻烦。所以得空做了报表的功能,其中附带了导出数据为excel。由于首次接触,以前也知识了解了一下,此次就深入的好好的研究了一下。对于报表的数据提取这些到没什么,主要是在导出数据和下载。经过了多方收集资料和对比之后,最后选定了NOPI做为导出excel的工具。至于其他的需要在本地服务器上安装软件什么的,觉得特别麻烦,觉得不可取。由于每个公司每个业务导出的报表样式及规则都不同,故这里只记录一下NOPI的要点。

  1.创建一个Excel文件

    

1 HSSFWorkbook workbook = new HSSFWorkbook();
View Code

  2.创建一个Excel的Sheet

1 HSSFSheet sheet = workbook.CreateSheet();

2 sheet.createFreezePane(1, 3);// 冻结 
View Code

  3.设置每列宽度样式

 1 方法一: 

 2 sheet.SetColumnWidth(0, 30 * 100);//注意,这里是和C#一样,从0开始

 3 方法二:

 4 //设置列宽

 5     

 6                 int columnWidth = sheet.GetColumnWidth(0) / 256;//获取当前列宽度  

 7                 int length = Encoding.UTF8.GetBytes(sheet.GetRow(index).GetCell(i).ToString()).Length;//获取当前单元格的内容宽度  

 8                 if (columnWidth < length + 1)

 9                     columnWidth = length + 1;

10                 sheet.SetColumnWidth(i, columnWidth * 256);//列宽  
View Code

  4.设置样式

 1 // Sheet样式    

 2     HSSFCellStyle sheetStyle = workbook.createCellStyle();    

 3     // 背景色的设定    

 4     sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);    

 5     // 前景色的设定    

 6     sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);    

 7     // 填充模式    

 8     sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS);    

 9     // 设置列的样式    

10     for (int i = 0; i <= 14; i++) {    

11       sheet.setDefaultColumnStyle((short) i, sheetStyle);    

12     }    
View Code

  5.设置excel第一行及标题

1  HSSFRow title = sheet.CreateRow(0);

2 

3             string[] titles = { "出团日期", "订单编号", "产品编号", "产品名称", "下单时间", "成人数", "儿童数", "销售价", "保险", "合同", "手续费", "实际收入" };

4             for (int i = 0; i < titles.Length; i++)

5             {

6                 title.CreateCell(i).SetCellValue(titles[i]);

7             }
View Code

  6.设置单元格公式、样式

 1 样式:

 2 // 设置字体    

 3     HSSFFont headfont = workbook.createFont();    

 4     headfont.setFontName("黑体");    

 5     headfont.setFontHeightInPoints((short) 22);// 字体大小    

 6     headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗    

 7     // 另一个样式    

 8     HSSFCellStyle headstyle = workbook.createCellStyle();    

 9     headstyle.setFont(headfont);    

10     headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中    

11     headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中    

12     headstyle.setLocked(true);    

13     headstyle.setWrapText(true);// 自动换行    

14     // 另一个字体样式    

15     HSSFFont columnHeadFont = workbook.createFont();    

16     columnHeadFont.setFontName("宋体");    

17     columnHeadFont.setFontHeightInPoints((short) 10);    

18     columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    

19     // 列头的样式    

20     HSSFCellStyle columnHeadStyle = workbook.createCellStyle();    

21     columnHeadStyle.setFont(columnHeadFont);    

22     columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中    

23     columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中    

24     columnHeadStyle.setLocked(true);    

25     columnHeadStyle.setWrapText(true);    

26     columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框的颜色    

27     columnHeadStyle.setBorderLeft((short) 1);// 边框的大小    

28     columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右边框的颜色    

29     columnHeadStyle.setBorderRight((short) 1);// 边框的大小    

30     columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体    

31     columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色    

32     // 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式)    

33     columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index);    

34     

35     HSSFFont font = workbook.createFont();    

36     font.setFontName("宋体");    

37     font.setFontHeightInPoints((short) 10);    

38     // 普通单元格样式    

39     HSSFCellStyle style = workbook.createCellStyle();    

40     style.setFont(font);    

41     style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中    

42     style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中    

43     style.setWrapText(true);    

44     style.setLeftBorderColor(HSSFColor.BLACK.index);    

45     style.setBorderLeft((short) 1);    

46     style.setRightBorderColor(HSSFColor.BLACK.index);    

47     style.setBorderRight((short) 1);    

48     style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体    

49     style.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.    

50     style.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色.    

51     // 另一个样式    

52     HSSFCellStyle centerstyle = workbook.createCellStyle();    

53     centerstyle.setFont(font);    

54     centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中    

55     centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中    

56     centerstyle.setWrapText(true);    

57     centerstyle.setLeftBorderColor(HSSFColor.BLACK.index);    

58     centerstyle.setBorderLeft((short) 1);    

59     centerstyle.setRightBorderColor(HSSFColor.BLACK.index);    

60     centerstyle.setBorderRight((short) 1);    

61     centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体    

62     centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.    

63     centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色. 

64 

65 公式:

66         //设置时间格式

67      HSSFCellStyle cellStyleGroupDate = workbook.CreateCellStyle();

68             HSSFDataFormat dateGroup = workbook.CreateDataFormat();

69             cellStyleGroupDate.DataFormat = dateGroup.GetFormat("yyyy-mm-dd");

70  //设置时间格式

71             HSSFCellStyle cellStyleInsertDate = workbook.CreateCellStyle();

72             HSSFDataFormat dateInsert = workbook.CreateDataFormat();

73             cellStyleInsertDate.DataFormat = dateInsert.GetFormat("yyyy-mm-dd hh:mm:ss");

74  //设置金额格式

75             HSSFCellStyle money = workbook.CreateCellStyle();

76             money.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");

77 

78 

79             给单元格设置公式

80         row.GetCell(0).CellStyle = cellStyleGroupDate;
View Code

  7.填充数据

    这不就有自己决定了,这里就不记录了

  8.输出流,并下载

 1 MemoryStream ms = new MemoryStream();

 2             workbook.Write(ms);

 3             string s = Request.Browser.Type;

 4             if (s.IndexOf("IE") != -1)

 5             {

 6                 Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode("XXXXX(" + begin.ToString("yyyy-MM-dd") + "---" + end.ToString("yyyy-MM-dd") + ")", System.Text.Encoding.UTF8) + ".xls"));

 7             }

 8             else

 9             {

10                 Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode("用XXXXXXXX(" + begin.ToString("yyyy-MM-dd") + "---" + end.ToString("yyyy-MM-dd") + ")", System.Text.Encoding.UTF8) + ".xls"));

11             }

12             Response.BinaryWrite(ms.ToArray());

13             workbook = null;

14             ms.Close();

15             ms.Dispose();
View Code

  

你可能感兴趣的:(Excel)