1

MS Office 2003でExcelシートを開こうとするとエラーが発生します。このExcelシートは、HSSFWorkbookを使用して作成され、usermodelスコープorg.apache.poi.hssf.usermodelを実装しています。

Microsoft Excel 2003の場合:「セル形式が多すぎます」。Microsoft Excel 2007/2010では、ファイルによって次のエラーメッセージが表示される場合があります:「Excelはファイルに読み取り不可能なコンテンツを見つけました」。これはセル形式に関するものです。以下のページを参照してください。

http://support.microsoft.com/kb/213904

では、どうすればこの問題をコードで修正できますか?

4

1 に答える 1

2

Excel では、使用できるさまざまなセル スタイルの数に制限があり、驚くほど少ないです。POI の操作に慣れていない人によくある問題は、セル スタイルがワークブック全体であるということを少しスキップして、代わりにセルごとに 1 つのセル スタイルを作成することです。これにより、Excelの制限をすぐに超えてしまいます...

以前は次のようなコードを書いていたかもしれません

Sheet s = wb.createSheet();
for (int rn=0; rn<=10; rn++) {
    Row r = s.createRow(rn);
    for (int cn=0; cn<=4; cn++) {
        Cell c = r.createCell(c);
        c.setCellValue( getMyCellValue(rn,cn) );

        CellStyle cs = wb.createCellStyle();
        cs.setBold(true);
        if (cn == 2) { 
            cs.setDataFormat( DataFormat.getFormat(yyyy/mm/dd) );
        }
        c.setCellStyle(cs);
    }
}

代わりに、セル スタイルの作成を最初に引き出す必要があります。

CellStyle bold = wb.createCellStyle();
bold.setBold(true);

CellStyle boldDate = wb.createCellStyle();
boldDate.setBold(true);
boldDate.setDataFormat( DataFormat.getFormat(yyyy/mm/dd) );

Sheet s = wb.createSheet();
for (int rn=0; rn<=10; rn++) {
    Row r = s.createRow(rn);
    for (int cn=0; cn<=4; cn++) {
        Cell c = r.createCell(c);
        c.setCellValue( getMyCellValue(rn,cn) );

        CellStyle cs = bold;
        if (cn == 2) { 
            cs = boldDate;
        }
        c.setCellStyle(cs);
    }
}
于 2012-07-14T15:51:04.053 に答える