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

  

posted @ 2015-01-20 10:48  瀞默  阅读(1507)  评论(0编辑  收藏  举报