• 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文件

  • 相关阅读:
    正则匹配任意字(包括换行符)
    linux终端光标的快捷键操作
    正则向前查找和向后查找
    正则表达式软件Expresso
    JsonP 跨域完全解析
    PHP代码阅读Phpxref
    ubuntu 操作用户名和密码
    curl多线程解释[转]
    php递归创建多级目录
    离散数学 第一章 命题逻辑 11 命题及其表示法
  • 原文地址:https://www.cnblogs.com/hthuang/p/3476147.html
Copyright © 2020-2023  润新知