zoukankan      html  css  js  c++  java
  • poi 导出Excel

    报表的导出是功能实现的重要的一个环节,我们今天就探究如何用poi 实现报表的导出Excel 

    1引入poi   

      <!--poi begin-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-excelant</artifactId>
                <version>${poi.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-examples</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <!--end-->

    2 选择导出的Excel 是什么格式的,这里我们选择Excel 2003 的(Poi解析2007年前的Excel时使用的是HSSFCell(.xls),而2007后的则是 XSSFCell(.xlsx))

    2.1 创建文档

     HSSFWorkbook wb = new HSSFWorkbook();

    2.2 创建文档的样式

    //创建样式对象
    HSSFCellStyle style=wb.createCellStyle(); //创建字体对象 HSSFFont font=wb.createFont(); //设置为宋体 font.setFontName("宋体"); //设置字体大小 font.setFontHeightInPoints((short)10); //左边框 style.setBorderLeft(BorderStyle.THIN);   //右边框 style.setBorderRight(BorderStyle.THIN); //上边框 style.setBorderTop(BorderStyle.THIN); //下边框 style.setBorderBottom(BorderStyle.THIN); //垂直居中 style.setVerticalAlignment(VerticalAlignment.CENTER); //字体居中 注://style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中--废弃
    style.setAlignment(HorizontalAlignment.CENTER);
    //样式字体
    style.setFont(font);
    //自动换行
    style.setWrapText(
    true);
          //单元格不锁定
    style.setLocked(
    false);

    2.3 创建表格  注意 行列从0 开始 

     //创建sheet
    HSSFSheet sheet = wb.createSheet();

     //合并单元格

     //合并单元格(必须先合并在创建行列) 参数 --开始行,结束行,开始列,结束列    
    sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 4)); sheet.addMergedRegion(new CellRangeAddress(4, 4, 0, 1));

     //设置行列(合并的单元格只用创建赋值第一个单元格就可以了)

    (合并的单元格只用创建赋值第一个单元格就可以了)
    //创建第三行
    HSSFRow row2 = sheet.createRow(2);
    //创建第三行第一列 HSSFCell cell2q0
    = row2.createCell(0);
    //赋值 cell2q0.setCellValue(
    "报表");
    //为这个单元格设置样式
    cell2q0.setCellStyle(style);

     //设置行高宽

    //设置第0 行列的高宽
    sheet.setColumnWidth(0, 20*256); row=sheet.getRow(0); row.setHeight((short) (20*20));

     //打印

    HSSFPrintSetup print = sheet.getPrintSetup();
    
            print.setLandscape(true);
    
            print.setScale((short) 80);
    
            print.setFitHeight((short) 4);
    
            print.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);
    
            String filename = 报表.xls";
    
            ExeclUtils.getFile(response, wb, filename);

     3 ExeclUtils 工具类

    package com.prison.common.poi;
    
    import com.prison.common.util.ImageHelper;
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.ss.usermodel.BorderStyle;
    import org.apache.poi.ss.usermodel.HorizontalAlignment;
    import org.apache.poi.ss.usermodel.VerticalAlignment;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFFont;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.HashMap;
    
    public class ExeclUtils {
        
        
        public static HSSFCellStyle getStyle(HSSFWorkbook wb) {
            
            
            HSSFCellStyle style=wb.createCellStyle();
            
            HSSFFont font=wb.createFont();
            
            font.setFontName("宋体");
            
            font.setFontHeightInPoints((short)10);
             
            style.setBorderLeft(BorderStyle.THIN);
            
            style.setBorderRight(BorderStyle.THIN);
            
            style.setBorderTop(BorderStyle.THIN);
            
            style.setBorderBottom(BorderStyle.THIN);
            
            style.setVerticalAlignment(VerticalAlignment.CENTER);
            
            style.setAlignment(HorizontalAlignment.CENTER);
            
            style.setFont(font);
            
            style.setWrapText(true);
            
            style.setLocked(false);
            
            return style;
        }
        
        public static HSSFCellStyle getCellStyle(HSSFWorkbook wb, int fontSize, int align, int verticalAlign) {
            
            
            HSSFCellStyle style=wb.createCellStyle();
            
            HSSFFont font=wb.createFont();
            
            font.setFontName("宋体");
            
            font.setFontHeightInPoints((short)10);
             
            style.setBorderLeft(BorderStyle.THIN);
            
            style.setBorderRight(BorderStyle.THIN);
            
            style.setBorderTop(BorderStyle.THIN);
            
            style.setBorderBottom(BorderStyle.THIN);
            
            switch (align) {
                case 1:
                    style.setAlignment(HorizontalAlignment.LEFT);
                    break;
                case 2:
                    style.setAlignment(HorizontalAlignment.CENTER);
                    break;
        
                default:
                    style.setAlignment(HorizontalAlignment.RIGHT);
                    break;
            }
            
            switch (align) {
                case 1:
                    style.setVerticalAlignment(VerticalAlignment.TOP);
                    break;
                case 2:
                    style.setVerticalAlignment(VerticalAlignment.CENTER);
                    break;
        
                default:
                    style.setVerticalAlignment(VerticalAlignment.BOTTOM);
                    break;
            }
            
            style.setFont(font);
            
            style.setWrapText(true);
            
            style.setLocked(false);
            
            return style;
        }
        
        
        
        
        
        public static  void setcellStyle(HSSFCellStyle style, int endColNum, HSSFSheet sheet, int beginRowNum, int endRowNum, HashMap<Integer, String[]> map) {
            String[] str;
            
            HSSFCell cell;
            
            HSSFRow row;
            for (int i=beginRowNum;i<endRowNum;i++) {
                row=sheet.createRow(i);
                str=map.get(i);
                for(int j=0;j<endColNum;j++) {
                    cell=row.createCell(j);
                    cell.setCellStyle(style);
                    if (str!=null&&str.length>j) {
                        cell.setCellValue(str[j]);
                    }else {
                        cell.setCellValue("");
                    }
                }
            }
            
        }
        
        
        public static  void setSpecialCellStyle(HSSFCellStyle style, int rowNum, HSSFSheet sheet, int colNum) {
            
            HSSFCell cell;
            
            HSSFRow row;
            
            row =sheet.getRow(rowNum);
            
            cell=row.getCell(colNum);
            
            cell.setCellStyle(style);
            
            cell.setCellValue(cell.getStringCellValue());
            
            
        }
        
        
        
        public static void setWidth(HSSFSheet sheet, int colNum, int width) {
            
            for(int i=0;i<colNum;i++) {
                sheet.setColumnWidth(i, width*256);
            }
        }
        
        public static void setCellMerge(HSSFSheet sheet, String[] str) {
            
            for(int i=0;i<str.length;i++) {
                sheet.addMergedRegion(CellRangeAddress.valueOf(str[i]));
            }
            
        }
        
        public static void setRowHeight(HSSFSheet sheet, int beginRowNum, int endRowNum, int height) {
            
            HSSFRow row ;
            for(int i=beginRowNum;i<endRowNum;i++) {
                
                 row=sheet.getRow(i);
                 
                 row.setHeight((short) (height*20));
                
            }
            
        }
        
        public static void setCellWidth(HSSFSheet sheet, int beginCelNum, int endCelNum, int width) {
            
            for(int i=beginCelNum;i<endCelNum;i++) {
                
                sheet.setColumnWidth(i, width*256);
                
            }
            
        }
        
        
        
        public static void getFile(HttpServletResponse response, HSSFWorkbook wb , String fileName) {
            
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            ServletOutputStream out=null;
            InputStream is=null;
            ByteArrayOutputStream os=null;
            
            try {
                String filename=fileName;
                
                response.setContentType("application/vnd.ms-excel;charset=utf-8");  
                response.addHeader("Content-Disposition", "attachment;filename=" + new String((filename).getBytes(), "iso-8859-1") );
                
                os= new ByteArrayOutputStream();
                wb.write(os);
                byte[] content = os.toByteArray();
                is = new ByteArrayInputStream(content);
                out = response.getOutputStream();     
                bis = new BufferedInputStream(is);
                bos = new BufferedOutputStream(out);
                byte[] buff = new byte[2048];
                int bytesRead;
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                  bos.write(buff, 0, bytesRead);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                ImageHelper.closeIO(bis,bos);
                ImageHelper.closeIO(is,os);
                ImageHelper.closeIO(null,out);
            } 
            
        }
        
        
        
        public static XSSFCellStyle getXSSFStyle(XSSFWorkbook wb) {
            XSSFCellStyle style=wb.createCellStyle();
            
            XSSFFont font=wb.createFont();
            
            font.setFontName("宋体");
            
            font.setFontHeightInPoints((short)12);
             
            style.setBorderLeft(BorderStyle.THIN);
            
            style.setBorderRight(BorderStyle.THIN);
            
            style.setBorderTop(BorderStyle.THIN);
            
            style.setBorderBottom(BorderStyle.THIN);
            
            style.setVerticalAlignment(VerticalAlignment.CENTER);
            
            style.setAlignment(HorizontalAlignment.CENTER);
            
            style.setFont(font);
            
            style.setWrapText(true);
            
            style.setLocked(false);
            
            return style;
        }
    
    }
  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/jsbk/p/9752981.html
Copyright © 2011-2022 走看看