Java Apache POI - 单元格格式化停止和重新启动工作

时间:2015-08-18 14:46:05

标签: java excel apache-poi

我有一个程序,它接受一个输入文件并将其放入excel中。一切都很好,直到第32000行左右。突然左对齐格式化停止工作。此外,它似乎突然重新开始工作在第65000行。我不确定发生了什么或为什么。我提供了格式化函数的代码。

private static void addDataToExcel(ArrayList<String[]> rowList, int amtOfColumns){
    SXSSFRow row = null;
    String[] colValues = null;

    for(int i = 1 ; i<= rowList.size() ;i++){
        row = (SXSSFRow) worksheet.createRow(rowCount);
        //TODO: Check if really necessary since for loop starts at 1 now
        if(i == 0){

        } else {
            colValues = rowList.get(i-1);
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(XSSFCellStyle.ALIGN_RIGHT);

        for(int j=0; j < amtOfColumns; j++){    
            if(colValues[j] == null){
                SXSSFCell cell = (SXSSFCell) row.createCell(j);

                cell.setCellValue(colValues[j+1]);
                cell.setCellStyle(style);
            }

            else{
                //System.out.println(j);
                SXSSFCell cell = (SXSSFCell) row.createCell(j);

                cell.setCellValue(colValues[j]);
                cell.setCellStyle(style);
            }
        }   
        rowCount++;
    }

    System.out.println("Running...");

1 个答案:

答案 0 :(得分:1)

问题是你每行创建一个单元格样式,这不是你应该做的事情。 Excel对工作簿可以处理的最大单元格样式具有相当低的限制。

由于“单元格样式”是工作簿范围,因此您应该将代码更改为

SXSSFRow row = null;
String[] colValues = null;

CellStyle style = workbook.createCellStyle();
style.setAlignment(XSSFCellStyle.ALIGN_RIGHT);

for (int i = 1 ; i<= rowList.size() ; i++) {
    row = (SXSSFRow) worksheet.createRow(rowCount);

这将阻止您耗尽可用的单元格样式,因此应该允许程序正常工作