zoukankan      html  css  js  c++  java
  • 10、借助POI实现Java生成并打印excel报表(1)

    10.1、了解 Apache POI

          实际开发中,用到最多的是把数据库中数据导出生成报表,尤其是在生产管理或者财务系统中用的非常普遍。生成报表格式一般是EXCEL或者PDF 。利用Apache  POI实现数据库中数据导出生成excel报表。在java众多数据导出excel报表的第三方jar包中POI相对来说比较好用。

           

          Apache POI 是用Java编写的免费开源的跨平台 API,给Java提供对Microsoft Office格式档案读和写的功能,创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE2复合文档格式(OLE2)。借助POI,Java可以读取、创建和修改MS Excel文件、MS Word文件及MSPowerPoint文件,其中office2003、2010均可以。下面是Apache POI 中提供的几大部分的作用:

                                 HSSF - 提供读写Microsoft Excel XLS格式档案的功能。

                                 HSSF - 提供读写Microsoft Excel XLS格式档案的功能。

                                 XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。

                                 HWPF - 提供读写Microsoft Word DOC格式档案的功能。

                                 HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

                                 HDGF - 提供读Microsoft Visio格式档案的功能。

                                 HPBF - 提供读Microsoft Publisher格式档案的功能。

                                 HSMF - 提供读Microsoft Outlook格式档案的功能。

    创建一个excel报表步骤:                  

    1. 创建新的Excel工作薄

    HSSFWorkbook workbook = new HSSFWorkbook();

    在Excel工作簿中建一工作表,其名为缺省值。POI中还提供了其他的一些workbook 构造方法。

    2.创建一个工作表。新建一名为"工资表"的工作表:  

    HSSFSheet sheet = workbook.createSheet("工资表"); 

    3.创建行。在索引0的位置创建行(最顶端的行):  

    HSSFRow row = sheet.createRow(0);

    4.创建单元格。在索引0的位置创建单元格(左上端):  

    HSSFCell cell = row.createCell((short) 0);

                定义单元格为字符串类型(也可在创建单元格里面设置):

    cell.setCellType(HSSFCell.CELL_TYPE_STRING); 

                在单元格中输入一些内容: 

    cell.setCellValue("增加值"); 

    5.新建一输出文件流,把相应的Excel工作簿输出到本地

    FileOutputStream fOut = new FileOutputStream(outputFile);

    workbook.write(fOut);

    fOut.flush();

                 操作结束,关闭文件

    fOut.close(); 

      在给单元格设置下从数据库中读取的数据。这样就可以把数据库里面的内容导入到excel了。

    10.2、常用方法列举:

    对象种类:

    HSSFWorkbook excell的文档对象 

    HSSFSheet excell的表单

    HSSFRow excell的行

    HSSFCell excell的格子单元

    HSSFFont excell字体

    HSSFName 名称

    HSSFDataFormat 日期格式 

    常用方法:

    1.合并单元格

     sheet.addMergedRegion(new Region(beginRowIndex , (short) beginColumnIndex , endRowIndex , (short) endColumnIndex ));

    即从A行的B列,合并到C行的D列。可以理解为一块面积。

    2.设置页脚

    HSSFFooter foot = sheet.getFooter();

     

    foot.setLeft("左边文字:");

    foot.setCenter("中间文字:");

    foot.setRight(HSSFFooter.page()+"/"+HSSFFooter.numPages());//显示的为:当前页/总页数。如:1/3

    3.生成Excel的思想

    灵活应用java提供的数据结构(List,Map,Set)。通常习惯把每个sheet定义为一个Map元素.即:

    Map<sheet名,数据集合>.  至于数据集合,则可根据实际情况组成相应的数据结构。总之,灵活应用数据结构: 生成Excel的逻辑可扩展性相当好,而且扩展起来甚是方便,并可以在一定程序上实现Excel的动态化。

    样式示例:(整数型、浮点型、布尔型、字符串型、日期格式、中西文结合式)

     1 import org.apache.poi.hssf.usermodel.*;  
     2 import java.io.FileOutputStream;  
     3 import java.io.IOException;  
     4 publicclass CreateCells  
     5 {  
     6 publicstaticvoid main(String[] args)  
     7 throws IOException  
     8 {  
     9 HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook对象
    10 HSSFSheet sheet = wb.createSheet("new sheet");//建立新的sheet对象
    11 // Create a row and put some cells in it. Rows are 0 based.
    12 HSSFRow row = sheet.createRow((short)0);//建立新行
    13 // Create a cell and put a value in it.
    14 HSSFCell cell = row.createCell((short)0);//建立新cell
    15 cell.setCellValue(1);//设置cell的整数类型的值
    16 // Or do it on one line.
    17 row.createCell((short)1).setCellValue(1.2);//设置cell浮点类型的值
    18 row.createCell((short)2).setCellValue("test");//设置cell字符类型的值
    19 row.createCell((short)3).setCellValue(true);//设置cell布尔类型的值
    20 HSSFCellStyle cellStyle = wb.createCellStyle();//建立新的cell样式
    21 cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//设置cell样式为定制的日期格式
    22 HSSFCell dCell =row.createCell((short)4);  
    23 dCell.setCellValue(new Date());//设置cell为日期类型的值
    24 dCell.setCellStyle(cellStyle); //设置该cell日期的显示格式
    25 HSSFCell csCell =row.createCell((short)5);  
    26 csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断
    27 csCell.setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串
    28 row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立错误cell
    29 // Write the output to a file
    30 FileOutputStream fileOut = new FileOutputStream("workbook.xls");  
    31 wb.write(fileOut);  
    32 fileOut.close();  
    33 }  
    34 } 

    10.3、程序模块

     在表格中间插入创建行:

    1  public void createNewRow(){  
     2         //下移行的条件有2个:当前行非初始行,且当前行没有超过最后一行  
     3         if(this.currRowIndex!=this.initRowIndex && this.lastRowIndex>this.currRowIndex){  
     4             //将指定的几行进行下移一行  
     5             sheet.shiftRows(this.currRowIndex, this.lastRowIndex, 1, true, true);  
     6             //既然下移了那么最后一行下标就也要增大了  
     7             this.lastRowIndex++;  
     8         }  
     9         //在指定的行上创建一个空行(如果此行原本有单元格和数据,那么也会被空行覆盖,且创建出来的空行是没有单元格的)  
    10         this.currRow = sheet.createRow(this.currRowIndex);  
    11         this.currRow.setHeightInPoints(this.defaultRowHeight);  
    12         this.currRowIndex++;  
    13         this.currColIndex = this.initColIndex;  
    14     }

    单元格前(背)景色、(顶底左右)边框及颜色、位置样式设置:

     1 /**
     2      * 样式设置
     3      */
     4     public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
     5         // *生成一个样式
     6         HSSFCellStyle style = workbook.createCellStyle();
     7         // 设置这些样式
     8         // 前景色
     9         style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
    10         // 背景色
    11         style.setFillBackgroundColor(HSSFColor.GREEN.index);
    12         // 填充样式
    13         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    14         // 设置底边框
    15         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    16         // 设置底边框颜色
    17         style.setBottomBorderColor(HSSFColor.BLACK.index);
    18         // 设置左边框
    19         style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    20         // 设置左边框颜色
    21             style.setLeftBorderColor(HSSFColor.BLACK.index);
    22         // 设置右边框
    23         style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    24         // 设置右边框颜色
    25             style.setRightBorderColor(HSSFColor.BLACK.index);
    26         // 设置顶边框
    27         style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    28         // 设置顶边框颜色  
    29             style.setTopBorderColor(HSSFColor.BLACK.index);
    30             // 设置自动换行
    31             style.setWrapText(false);
    32             // 设置水平对齐的样式为居中对齐
    33             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    34             // 设置垂直对齐的样式为居中对齐
    35             style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    36 //        HSSFFont font = createCellFont(workbook);
    37 //        // 把字体应用到当前的样式
    38 //        style.setFont(font);
    39         return style;
    40     }

    单元格字体样式设置:

     1 /**
     2      * 字体设置
     3      */
     4     public static HSSFFont createCellFont(HSSFWorkbook workbook){
     5         // *生成一个字体
     6         HSSFFont font = workbook.createFont();
     7         // 字体颜色
     8         font.setColor(HSSFColor.VIOLET.index);
     9         // 字体大小
    10         font.setFontHeightInPoints((short) 12);
    11         // 字体加粗
    12         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    13         // 是否使用斜体
    14         font.setItalic( true );
    15         // 是否使用划线
    16         //font.setStrikeout(true);
    17         // 字体名字
    18         font.setFontName( " 黑体 " );
    19         return font;
    20     }

    保留小数位数样式设置:

    1 /**
    2  * 保留2位小数
    3  */
    4  HSSFCellStyle cellStyle = workbook.createCellStyle();
    5  Short doubleFormat = workbook.createDataFormat().getFormat("0.00");
    6  cellStyle.setDataFormat(doubleFormat);
    7  cellStyle.setDataFormat(doubleFormat);

    注释设置:

     1 /**
     2  * 注释设置
     3  */
     4 public static HSSFComment createCellComment(HSSFPatriarch patriarch, String commentText, String commentName){
     5    // *添加单元格注释
     6    // 定义注释的大小和位置,详见文档
     7    HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 1, (short) 2, 2));
     8    // 设置注释内容
     9    comment.setString(new HSSFRichTextString(commentText));
    10    // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
    11    comment.setAuthor(commentName);
    12    return comment;
    13 }

    图片插入设置:

     1 /**
     2      * 图片插入
     3      */
     4     public static void createCellPicture(HSSFWorkbook workbook, HSSFPatriarch patriarch, String url, int col, int row) throws Exception{
     5         //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
     6         BufferedImage bufferImg =null;
     7         ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
     8         bufferImg = ImageIO.read(new File( url )); 
     9         ImageIO.write(bufferImg,"jpg",byteArrayOut);
    10         HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,1023, 255, (short) col, row, (short) col, row);
    11         anchor.setAnchorType(3);
    12         //插入图片
    13         patriarch.createPicture(anchor , workbook.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
    14         byteArrayOut.flush();
    15         byteArrayOut.close();
    16     }

    10.4、实例:

    报表生成类:ComplexExportExcelClient.java

    1 package com.bzu.search.action;  
      2  
      3 import java.util.ArrayList;  
      4 import java.util.List;  
      5  
      6 import org.apache.poi.hssf.usermodel.HSSFCell;  
      7 import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
      8 import org.apache.poi.hssf.usermodel.HSSFFont;  
      9 import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
     10 import org.apache.poi.hssf.usermodel.HSSFRow;  
     11 import org.apache.poi.hssf.usermodel.HSSFSheet;  
     12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
     13 import org.apache.poi.hssf.util.Region;  
     14  
     15 /**  
     16  * 拒绝件报表生成类.  
     17  *   
     18  * @author caoyb  
     19  * @version $Revision:$  
     20  */ 
     21 public class ComplexExportExcelClient {  
     22  
     23     private static HSSFWorkbook wb = new HSSFWorkbook();  
     24  
     25     private static HSSFSheet sheet = wb.createSheet();  
     26  
     27     @SuppressWarnings({ "unchecked", "deprecation" })  
     28     public static void main(String[] args) {  
     29  
     30         ExportExcel exportExcel = new ExportExcel(wb, sheet);  
     31  
     32         // 创建列标头LIST  
     33         List fialList = new ArrayList();  
     34  
     35         fialList.add("申请人未提供任何联系方式");  
     36         fialList.add("无工作单位信息且未提供收入来源信息");  
     37         fialList.add("有工作单位但未提供单位地址或电话");  
     38         fialList.add("家庭地址缺失");  
     39         fialList.add("客户身份证明资料缺");  
     40         fialList.add("签名缺失或签名不符合要求");  
     41         fialList.add("其它");  
     42  
     43         List errorList = new ArrayList();  
     44  
     45         errorList.add("客户主动取消");  
     46         errorList.add("个人征信不良");  
     47         errorList.add("欺诈申请");  
     48         errorList.add("申请人基本条件不符");  
     49         errorList.add("申请材料不合规");  
     50         errorList.add("无法正常完成征信");  
     51         errorList.add("重复申请");  
     52         errorList.add("其他");  
     53  
     54         // 计算该报表的列数  
     55         int number = 2 + fialList.size() * 2 + errorList.size() * 2;  
     56  
     57         // 给工作表列定义列宽(实际应用自己更改列数)  
     58         for (int i = 0; i < number; i++) {  
     59             sheet.setColumnWidth(i, 3000);  
     60         }  
     61  
     62         // 创建单元格样式  
     63         HSSFCellStyle cellStyle = wb.createCellStyle();  
     64  
     65         // 指定单元格居中对齐  
     66         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
     67  
     68         // 指定单元格垂直居中对齐  
     69         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
     70  
     71         // 指定当单元格内容显示不下时自动换行  
     72         cellStyle.setWrapText(true);  
     73  
     74         // 设置单元格字体  
     75         HSSFFont font = wb.createFont();  
     76         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
     77         font.setFontName("宋体");  
     78         font.setFontHeight((short) 200);  
     79         cellStyle.setFont(font);  
     80  
     81         // 创建报表头部  
     82         exportExcel.createNormalHead("南京地区申请资料拒件分析统计", number);  
     83  
     84         // 设置第二行  
     85         String[] params = new String[] { "    年  月  日", "  年  月  日" };  
     86         exportExcel.createNormalTwoRow(params, number);  
     87  
     88         // 设置列头  
     89         HSSFRow row2 = sheet.createRow(2);  
     90  
     91         HSSFCell cell0 = row2.createCell(0);  
     92         cell0.setCellStyle(cellStyle);  
     93         cell0.setCellValue(new HSSFRichTextString("机构代码"));  
     94  
     95         HSSFCell cell1 = row2.createCell(1);  
     96         cell1.setCellStyle(cellStyle);  
     97         cell1.setCellValue(new HSSFRichTextString("支行名称"));  
     98  
     99         HSSFCell cell2 = row2.createCell(2);  
    100         cell2.setCellStyle(cellStyle);  
    101         cell2.setCellValue(new HSSFRichTextString("无效件"));  
    102  
    103         HSSFCell cell3 = row2.createCell(2 * fialList.size() + 2);  
    104         cell3.setCellStyle(cellStyle);  
    105         cell3.setCellValue(new HSSFRichTextString("拒绝件"));  
    106  
    107         HSSFRow row3 = sheet.createRow(3);  
    108  
    109         // 设置行高  
    110         row3.setHeight((short) 800);  
    111  
    112         HSSFCell row3Cell = null;  
    113         int m = 0;  
    114         int n = 0;  
    115  
    116         // 创建不同的LIST的列标题  
    117         for (int i = 2; i < number; i = i + 2) {  
    118  
    119             if (i < 2 * fialList.size() + 2) {  
    120                 row3Cell = row3.createCell(i);  
    121                 row3Cell.setCellStyle(cellStyle);  
    122                 row3Cell.setCellValue(new HSSFRichTextString(fialList.get(m)  
    123                         .toString()));  
    124                 m++;  
    125             } else {  
    126                 row3Cell = row3.createCell(i);  
    127                 row3Cell.setCellStyle(cellStyle);  
    128                 row3Cell.setCellValue(new HSSFRichTextString(errorList.get(n)  
    129                         .toString()));  
    130                 n++;  
    131             }  
    132  
    133         }  
    134  
    135         // 创建最后一列的合计列  
    136         row3Cell = row3.createCell(number);  
    137         row3Cell.setCellStyle(cellStyle);  
    138         row3Cell.setCellValue(new HSSFRichTextString("合计"));  
    139  
    140         // 合并单元格  
    141         HSSFRow row4 = sheet.createRow(4);  
    142  
    143         // 合并第一列的 第三行到第五行
    144         sheet.addMergedRegion(new Region(2, (short) 0, 4, (short) 0));  
    145  
    146         // 合并第二行的 第三行到第五行
    147         sheet.addMergedRegion(new Region(2, (short) 1, 4, (short) 1));  
    148  
    149         // 合并第三行的  第三列到第AA指定的列  
    150         int aa = 2 * fialList.size() + 1;  
    151         sheet.addMergedRegion(new Region(2, (short) 2, 2, (short) aa));  
    152  
    153         int start = aa + 1;  
    154  
    155         sheet.addMergedRegion(new Region(2, (short) start, 2,  
    156                 (short) (number - 1)));  
    157  
    158         // 循环合并第四行的行,并且是每2列合并成一列  
    159         for (int i = 2; i < number; i = i + 2) {  
    160             sheet.addMergedRegion(new Region(3, (short) i, 3, (short) (i + 1)));  
    161  
    162         }  
    163  
    164         // 根据列数奇偶数的不同创建不同的列标题  
    165         for (int i = 2; i < number; i++) {  
    166             if (i < 2 * fialList.size() + 2) {  
    167  
    168                 if (i % 2 == 0) {  
    169                     HSSFCell cell = row4.createCell(i);  
    170                     cell.setCellStyle(cellStyle);  
    171                     cell.setCellValue(new HSSFRichTextString("无效量"));  
    172                 } else {  
    173                     HSSFCell cell = row4.createCell(i);  
    174                     cell.setCellStyle(cellStyle);  
    175                     cell.setCellValue(new HSSFRichTextString("占比"));  
    176                 }  
    177             } else {  
    178                 if (i % 2 == 0) {  
    179                     HSSFCell cell = row4.createCell(i);  
    180                     cell.setCellStyle(cellStyle);  
    181                     cell.setCellValue(new HSSFRichTextString("拒绝量"));  
    182                 } else {  
    183                     HSSFCell cell = row4.createCell(i);  
    184                     cell.setCellStyle(cellStyle);  
    185                     cell.setCellValue(new HSSFRichTextString("占比"));  
    186                 }  
    187             }  
    188  
    189         }  
    190  
    191         // 循环创建中间的单元格的各项的值  
    192         for (int i = 5; i < number; i++) {  
    193             HSSFRow row = sheet.createRow((short) i);  
    194             for (int j = 0; j <= number; j++) {  
    195                 exportExcel  
    196                         .cteateCell(wb, row, (short) j,  
    197                                 HSSFCellStyle.ALIGN_CENTER_SELECTION, String  
    198                                         .valueOf(j));  
    199             }  
    200  
    201         }  
    202  
    203         // 创建最后一行的合计行  
    204         String[] cellValue = new String[number - 1];  
    205         for (int i = 0; i < number - 1; i++) {  
    206             cellValue[i] = String.valueOf(i);  
    207  
    208         }  
    209         exportExcel.createLastSumRow(1, cellValue);  
    210  
    211         exportExcel.outputExcel("c:\拒绝件统计.xls");  
    212  
    213     }  
    214 } 

    EXCEL报表工具类:ExportExcel.java

      1 package com.bzu.search.action;  
      2  
      3 import java.io.File;  
      4 import java.io.FileNotFoundException;  
      5 import java.io.FileOutputStream;  
      6 import java.io.IOException;  
      7  
      8 import org.apache.poi.hssf.usermodel.HSSFCell;  
      9 import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
     10 import org.apache.poi.hssf.usermodel.HSSFFont;  
     11 import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
     12 import org.apache.poi.hssf.usermodel.HSSFRow;  
     13 import org.apache.poi.hssf.usermodel.HSSFSheet;  
     14 import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
     15 import org.apache.poi.hssf.util.HSSFColor;  
     16 import org.apache.poi.hssf.util.Region;  
     17  
     18 /**  
     19  * EXCEL报表工具类.  
     20  *   
     21  * @author caoyb  
     22  * @version $Revision:$  
     23  */ 
     24 public class ExportExcel {  
     25  
     26     private HSSFWorkbook wb = null;  
     27  
     28     private HSSFSheet sheet = null;  
     29  
     30     /**  
     31      * @param wb  
     32      * @param sheet  
     33      */ 
     34     public ExportExcel(HSSFWorkbook wb, HSSFSheet sheet) {  
     35         super();  
     36         this.wb = wb;  
     37         this.sheet = sheet;  
     38     }  
     39  
     40     /**  
     41      * @return the sheet  
     42      */ 
     43     public HSSFSheet getSheet() {  
     44         return sheet;  
     45     }  
     46  
     47     /**  
     48      * @param sheet  
     49      *            the sheet to set  
     50      */ 
     51     public void setSheet(HSSFSheet sheet) {  
     52         this.sheet = sheet;  
     53     }  
     54  
     55     /**  
     56      * @return the wb  
     57      */ 
     58     public HSSFWorkbook getWb() {  
     59         return wb;  
     60     }  
     61  
     62     /**  
     63      * @param wb  
     64      *            the wb to set  
     65      */ 
     66     public void setWb(HSSFWorkbook wb) {  
     67         this.wb = wb;  
     68     }  
     69  
     70     /**  
     71      * 创建通用EXCEL头部  
     72      *   
     73      * @param headString  
     74      *            头部显示的字符  
     75      * @param colSum  
     76      *            该报表的列数  
     77      */ 
     78     public void createNormalHead(String headString, int colSum) {  
     79  
     80         HSSFRow row = sheet.createRow(0);  
     81  
     82         // 设置第一行  
     83         HSSFCell cell = row.createCell(0);  
     84         row.setHeight((short) 400);  
     85  
     86         // 定义单元格为字符串类型  
     87         cell.setCellType(HSSFCell.ENCODING_UTF_16);  
     88         cell.setCellValue(new HSSFRichTextString("南京城区各网点进件统计报表"));  
     89  
     90         // 指定合并区域  
     91         sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) colSum));  
     92  
     93         HSSFCellStyle cellStyle = wb.createCellStyle();  
     94  
     95         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐  
     96         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐  
     97         cellStyle.setWrapText(true);// 指定单元格自动换行  
     98  
     99         // 设置单元格字体  
    100         HSSFFont font = wb.createFont();  
    101         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
    102         font.setFontName("宋体");  
    103         font.setFontHeight((short) 300);  
    104         cellStyle.setFont(font);  
    105  
    106         cell.setCellStyle(cellStyle);  
    107     }  
    108  
    109     /**  
    110      * 创建通用报表第二行  
    111      *   
    112      * @param params  
    113      *            统计条件数组  
    114      * @param colSum  
    115      *            需要合并到的列索引  
    116      */ 
    117     public void createNormalTwoRow(String[] params, int colSum) {  
    118         HSSFRow row1 = sheet.createRow(1);  
    119         row1.setHeight((short) 300);  
    120  
    121         HSSFCell cell2 = row1.createCell(0);  
    122  
    123         cell2.setCellType(HSSFCell.ENCODING_UTF_16);  
    124         cell2.setCellValue(new HSSFRichTextString("统计时间:" + params[0] + "至" 
    125                 + params[1]));  
    126  
    127         // 指定合并区域  
    128         sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) colSum));  
    129  
    130         HSSFCellStyle cellStyle = wb.createCellStyle();  
    131         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐  
    132         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐  
    133         cellStyle.setWrapText(true);// 指定单元格自动换行  
    134  
    135         // 设置单元格字体  
    136         HSSFFont font = wb.createFont();  
    137         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
    138         font.setFontName("宋体");  
    139         font.setFontHeight((short) 250);  
    140         cellStyle.setFont(font);  
    141  
    142         cell2.setCellStyle(cellStyle);  
    143  
    144     }  
    145  
    146     /**  
    147      * 设置报表标题  
    148      *   
    149      * @param columHeader  
    150      *            标题字符串数组  
    151      */ 
    152     public void createColumHeader(String[] columHeader) {  
    153  
    154         // 设置列头  
    155         HSSFRow row2 = sheet.createRow(2);  
    156  
    157         // 指定行高  
    158         row2.setHeight((short) 600);  
    159  
    160         HSSFCellStyle cellStyle = wb.createCellStyle();  
    161         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐  
    162         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐  
    163         cellStyle.setWrapText(true);// 指定单元格自动换行  
    164  
    165         // 单元格字体  
    166         HSSFFont font = wb.createFont();  
    167         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
    168         font.setFontName("宋体");  
    169         font.setFontHeight((short) 250);  
    170         cellStyle.setFont(font);  
    171  
    172         /*  
    173          * cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单无格的边框为粗体  
    174          * cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.  
    175          * cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
    176          * cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);  
    177          * cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);  
    178          * cellStyle.setRightBorderColor(HSSFColor.BLACK.index);  
    179          * cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);  
    180          * cellStyle.setTopBorderColor(HSSFColor.BLACK.index);  
    181          */ 
    182  
    183         // 设置单元格背景色  
    184         cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);  
    185         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
    186  
    187         HSSFCell cell3 = null;  
    188  
    189         for (int i = 0; i < columHeader.length; i++) {  
    190             cell3 = row2.createCell(i);  
    191             cell3.setCellType(HSSFCell.ENCODING_UTF_16);  
    192             cell3.setCellStyle(cellStyle);  
    193             cell3.setCellValue(new HSSFRichTextString(columHeader[i]));  
    194         }  
    195  
    196     }  
    197  
    198     /**  
    199      * 创建内容单元格  
    200      *   
    201      * @param wb  
    202      *            HSSFWorkbook  
    203      * @param row  
    204      *            HSSFRow  
    205      * @param col  
    206      *            short型的列索引  
    207      * @param align  
    208      *            对齐方式  
    209      * @param val  
    210      *            列值  
    211      */ 
    212     public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align,  
    213             String val) {  
    214         HSSFCell cell = row.createCell(col);  
    215         cell.setCellType(HSSFCell.ENCODING_UTF_16);  
    216         cell.setCellValue(new HSSFRichTextString(val));  
    217         HSSFCellStyle cellstyle = wb.createCellStyle();  
    218         cellstyle.setAlignment(align);  
    219         cell.setCellStyle(cellstyle);  
    220     }  
    221  
    222     /**  
    223      * 创建合计行  
    224      *   
    225      * @param colSum  
    226      *            需要合并到的列索引  
    227      * @param cellValue  
    228      */ 
    229     public void createLastSumRow(int colSum, String[] cellValue) {  
    230  
    231         HSSFCellStyle cellStyle = wb.createCellStyle();  
    232         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐  
    233         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐  
    234         cellStyle.setWrapText(true);// 指定单元格自动换行  
    235  
    236         // 单元格字体  
    237         HSSFFont font = wb.createFont();  
    238         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
    239         font.setFontName("宋体");  
    240         font.setFontHeight((short) 250);  
    241         cellStyle.setFont(font);  
    242  
    243         HSSFRow lastRow = sheet.createRow((short) (sheet.getLastRowNum() + 1));  
    244         HSSFCell sumCell = lastRow.createCell(0);  
    245  
    246         sumCell.setCellValue(new HSSFRichTextString("合计"));  
    247         sumCell.setCellStyle(cellStyle);  
    248         sheet.addMergedRegion(new Region(sheet.getLastRowNum(), (short) 0,  
    249                 sheet.getLastRowNum(), (short) colSum));// 指定合并区域  
    250  
    251         for (int i = 2; i < (cellValue.length + 2); i++) {  
    252             sumCell = lastRow.createCell(i);  
    253             sumCell.setCellStyle(cellStyle);  
    254             sumCell.setCellValue(new HSSFRichTextString(cellValue[i - 2]));  
    255  
    256         }  
    257  
    258     }  
    259  
    260     /**  
    261      * 输入EXCEL文件  
    262      *   
    263      * @param fileName  
    264      *            文件名  
    265      */ 
    266     public void outputExcel(String fileName) {  
    267         FileOutputStream fos = null;  
    268         try {  
    269             fos = new FileOutputStream(new File(fileName));  
    270             wb.write(fos);  
    271             fos.close();  
    272         } catch (FileNotFoundException e) {  
    273             e.printStackTrace();  
    274         } catch (IOException e) {  
    275             e.printStackTrace();  
    276         }  
    277     }  
    278 } 

     运行上述两段代码你就会在c盘的根目录下看到一个拒绝件统计.xls文件

  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/hthuang/p/3476147.html
Copyright © 2011-2022 走看看