Apache POI Excel单元格格式不能超出工作表中的32748单元格

时间:2013-01-31 03:44:26

标签: apache-poi

我有一个要求,我需要为给定时期内的所有交易生成报告,我需要相应地应用单元格格式。在这种情况下,单元格格式化不起作用,特别是在工作表中创建32748单元格后的日期。这似乎是API中的错误,如果有人已经遇到此问题并发现任何修复,请提供一些输入。

供参考,以下是示例代码:

public class TestFormat {

public static void main(String args[]){
    try {
    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("Excel Sheet");

    HSSFDataFormat format = wb.createDataFormat();


    for(int i = 1; i<65535;i++ ) {

            HSSFRow row = sheet.createRow(i);
            HSSFCell cell = row.createCell(1);
            HSSFCellStyle style = wb.createCellStyle();
            cell.setCellValue((Date) new Date());
            style.setDataFormat(format.getFormat("MM/dd/yyyy HH:mm:ss"));
            cell.setCellStyle(style);

    }
    FileOutputStream fileOut;

        fileOut = new FileOutputStream("c:\\test\\excelFile.xls");
         wb.write(fileOut);
            fileOut.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("Data is saved in excel file.");
}

}

1 个答案:

答案 0 :(得分:5)

您正在循环中创建单元格样式。不要!

Excel对文件格式允许的单元格样式数有限制。你需要做的是将你的单元格样式的创建/设置移到循环之外,所以它只创建一次,它应该没问题

您的代码的核心部分将类似于:

HSSFDataFormat format = wb.createDataFormat();
HSSFCellStyle style = wb.createCellStyle();
cell.setCellValue((Date) new Date());
style.setDataFormat(format.getFormat("MM/dd/yyyy HH:mm:ss"));

for(int i = 1; i<65535;i++ ) {
        HSSFRow row = sheet.createRow(i);
        HSSFCell cell = row.createCell(1);
        cell.setCellStyle(style);
}