• POI生成excel,自定义excel样式


    POI创建excel有三种方式,分别为HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook
    HSSFWorkbook最多只能导出65533行数据,扩展名为xls
    XSSFWorkbook为了解决HSSFWorkbook行数限制问题,最大可导出1048576行16384列,扩展名为xlsx,但是数据过大会导致内存占用过多引入内存溢出等问题
    SXSSFWorkbook可以通过程序设置,将超过指定行数的数据直接持久化到磁盘中,从而不影响内存
    poi的行数和列数是从0开始,这里在合并单元格的时候需要注意
    下面通过代码实现创建excel、sheet、row、cell、单元格样式、合并单元格
    //创建excel
    SXSSFWorkbook wb = new SXSSFWorkbook();
    //压缩临时文件
    wb.setCompressTempFiles(true);
    //定义文件名,如果需要文件夹,需要先创建文件夹,linux路径为/path,windows路径为\path
    String fileName = "xxx.xlsx";
    File file = new File(fileName);
    if (!file.exists()) {
        file.createNewFile();
    }
    
    createExcel(SXSSFWorkbook wb);
    
    //转化成文件输出流输出到文件名的路径中生成excel
    OutputStream out = new FileOutputStream(file);
    wb.write(out);
    out.close();
    //删除写入磁盘中的临时文件,最好放到finally中
    wb.dispose();
    public void createExcel(){
        SXSSFSheet sheet = wb.createSheet("sheet名");
        //设置sheet页中的每行的宽度,可以根据下标进行定制
        for(int i = 0; i < 5; i++){
            sheet.setColumnWidth(i, 5000);
        }
    
        //创建行
        SXSSFRow row = sheet.createRow(rowNum++);
        //创建行内的单元格,需要从第一个单元格开始设置值,可以为null,一行多个值可以通过循环设置每行的值
        SXSSFCell cell=row.createCell(i);
        cell.setCellValue("单元格内容");
        //设置单元格样式,如果对excel的样式有要求,如字体、边框、填充色等等
        cell.setCellStyle(createStyle(wb));
    
    }
    public CellStyle createStyle(SXSSFWorkbook wb){
        CellStyle style = wb.createCellStyle();
        //设置字体
        style.setFont(getFont(wb));
        //设置对齐方式
        style.setAlignment(HorizontalAlignment.CENTER);
        //设置垂直对齐方式
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置是否锁定
        style.setLocked(true);
        //设置是否自动换行
        style.setWrapText(false);
        //设置边框
        style.setBorderBottom(BorderStyle.NONE);
        style.setBorderLeft(BorderStyle.NONE);
        style.setBorderTop(BorderStyle.NONE);
        style.setBorderRight(BorderStyle.NONE);
        return style;
    }
    public Font getFont(SXSSFWorkbook wb){
        Font font = workwbbook.createFont();
        font.setFontName("华文彩云");
        font.setFontHeightInPoints((short) 60);
        font.setBold(true);
        font.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        return font;
    }
    //合并单元格
    //开始行 结束行 第几列 颜色
    public void mergeCell(SXSSFWorkbook workbook, SXSSFSheet sheet, int startRowIndex, int endRowIndex, int columnIndex, Short color){
    
            //设置合并单元格的样式,不然合并后可能会丢失边框,具体可以自己定义
        CellStyle style = workbook.createStyle();
        if(color != null) {
            //填充单元格
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            //设置单元格背景色,可以参考HSSFColor.HSSFColorPredefined.BLACK.getIndex()
            style.setFillForegroundColor(color);
        }
        
        for(int i = startRowIndex; i <= endRowIndex; i++) {
            Row row = sheet.getRow(i);
            if(row == null){
                break;
            }
            Cell cell = row.getCell(columnIndex);
            cell.setCellStyle(style);
        }
    }

    最终效果

     

    博客链接:https://www.cnblogs.com/gqymy/
  • 相关阅读:
    逆光拍摄常见的问题(解决大光比问题)
    HDP和包围曝光
    直方图
    linux查找文件的命令【转】
    100篇大数据文章[转]
    squid
    修改/etc/resolv.conf又恢复到原来的状态?[转]
    python字符串及正则表达式[转]
    GraphLab介绍[转]
    Scala 中的 apply 和 update 方法[转]
  • 原文地址:https://www.cnblogs.com/gqymy/p/15137977.html
Copyright © 2020-2023  润新知