-1

特定の期間のすべてのトランザクションのレポートを生成する必要があるという要件があり、それに応じてセル形式を適用する必要があります。この場合、シートに 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.");
}

}

4

1 に答える 1

6

ループでセル スタイルを作成しています。しないでください!

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);
}
于 2013-01-31T09:40:43.857 に答える