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

原文地址:https://www.cnblogs.com/MrZhaoyx/p/13102883.html