• 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

      

  • 相关阅读:
    属于程序员的算法
    知乎:全栈工程师讨论
    盘点2015年前20款表现出色的免费开源软件
    qt学习之路
    ubuntu联网经常掉线的解决方法
    备份书签
    linux 命令行测试网速
    linux中判断ssh是否启动
    php heredoc 与 nowdoc
    php 双向队列类
  • 原文地址:https://www.cnblogs.com/zcy-xy/p/4235461.html
Copyright © 2020-2023  润新知