首页 > 其他 > 详细

SXSSFWorkbook使用补充

时间:2020-06-12 18:18:03      阅读:250      评论:0      收藏:0      [点我收藏+]

今天使用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 = 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

SXSSFWorkbook使用补充

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!