• SXSSFWorkbook使用补充


    今天使用SXSSFWorkbook导出了一份比较复杂的Excel文件,总结如下

    竖向文字

    CellStyle cellStyle = sheet.getWorkbook().createCellStyle();
    cellStyle.setRotation((short)255);//将文本改为竖向
    cellStyle.setVerticalAlignment(VerticalAlignment.TOP);//设置单元格顶端对其

    合并单元格

    //第一个参数startRow,开始行
    //第二个参数endRow,结束行
    //第三个参数startCol,开始列
    //第四个参数endCol,结束列
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));//合并第一行0、1、2单元格

    CellStyle克隆合并

    有些情况下一个单元格需要两个CellStyle,但是设置第二个CellStyle时第一个CellStyle会被覆盖,官网提供了一个方法用来合并CellStyle

    //第一个CellStyle,仅设置竖向显示文字
    CellStyle cellStyle1 = sheet.getWorkbook().createCellStyle();
    cellStyle1.setRotation((short) 255);
    //第二个CellStyle,仅设置单元格背景颜色
    CellStyle cellStyle2 = sheet.getWorkbook().createCellStyle();
    cellStyle2.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    //合并cellStyle1和cellStyle2,cellStyle1既可以竖向显示文字又可以设置单元格背景颜色 cellStyle1.cloneStyleFrom(cellStyle2);

    改变文本颜色

    CellStyle cellStyle = sheet.getWorkbook().createCellStyle();
    Font font = sheet.getWorkbook().createFont();
    font.setColor(IndexedColors.RED.getIndex());
    cellStyle.setFont(font);

    分块制表

    按照通常的逻辑,制表的顺序应该是先从第一行开始,第一行完成后,开始处理第二行,以此类推。

    但是有时会遇到一种情况,分块制表比较方便,即处理完(A1,D4)后再处理(E1,H4),但是这样就会有一个问题,我在处理(A1,D4)时使用sheet.createRow()创建了四个Row对象,(A1,D4)处理完成后再处理(E1,H4)时,我又使用sheet.createRow()创建了四个Row对象,这时我发现,(A1,D4)中的数据被清空了,于是我想,会不会是(A1,D4)中的行对象被覆盖了,看了源码后发现确实是这样

    private final TreeMap<Integer, SXSSFRow> _rows = new TreeMap();
    public SXSSFRow createRow(int rownum) {
        /*此处省略部分代码*/
        SXSSFRow newRow = new SXSSFRow(this);
        this._rows.put(rownum, newRow);
        /*此处省略部分代码*/
    }

    这样的话我们只能在处理表格之前先使用sheet.createRow(index)Row对象一次性创建出来,只后需要用到Row对象时,直接使用sheet.getRow(index)即可,我自己写了一个方法,可以参考一下。

    /** 
    * 在sheet页中创建行与单元格 
    * @param sheet 
    * @param startRow 开始行
    * @param endRow 结束行
    */
    private void createRow(Sheet sheet, int startRow, int endRow) 
    {    
        for (int i = startRow; i < endRow; i++) {        
            Row row = sheet.createRow(i); 
        }
    }

     参考网站:http://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFWorkbook.html

  • 相关阅读:
    linux内核之情景分析mmap操作
    linux内核情景分析之匿名管道
    linux内核情景分析之命名管道
    linux内核情景分析之信号实现
    Linux内核情景分析之消息队列
    linux2.4内核调度
    聊聊程序的配置文件
    汽车引擎是怎么工作的
    Go对OO的选择
    为而不争
  • 原文地址:https://www.cnblogs.com/MrZhaoyx/p/13102883.html
Copyright © 2020-2023  润新知