1

POI 3.9 と jdk1.6.0_14 を使用しています。

以下のコードを autoSizeColumn に使用していますが、問題は、Excel が生成されたとき、列に完全に自動サイズ設定されていないことです。列間をダブルクリックすると、その列が正しく自動サイズ設定されていることがわかります。

for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
            HSSFSheet thisSheet = workbook.getSheetAt(i);
            log.info("Last row : "+thisSheet.getLastRowNum());
            HSSFRow rowexcel = thisSheet.getRow(thisSheet.getLastRowNum());
            // Auto sizing columns
            for (short j = 0; j < rowexcel.getLastCellNum(); j++) {
                workbook.getSheetAt(i).autoSizeColumn(j);
            }
            // Freezing the top row
            workbook.getSheetAt(i).createFreezePane(0, 1);
        }

それ以外の

HSSFRow rowexcel = thisSheet.getRow(thisSheet.getLastRowNum());

私も一番上の行で試しました

HSSFRow rowexcel = thisSheet.getRow(0);

しかし、まだ解決策はありません。

4

1 に答える 1

0

あなたが説明した正確な問題を経験し、Cell上記のコメントのいくつかで提案されているように、スタイルを介してフォントを明示的に設定することで、ある程度の成功を収めることができました (こちらも)。

autoSizeColumnただし、すべてのセルの幅をまだ考慮していないことに気付きました。特に、基本的に各列のデータを説明する列ヘッダーであるセルの行があります。これらのセルにはカスタムFontが正常に適用されましたが、実行時に列の幅に関してまだ考慮されていませんでしたautoSizeColumn。違いはありますが、私はそれらが無関係であると仮定したでしょう. たとえば、ヘッダーには列の残りのデータとは異なるセル タイプがあり、セル ヘッダーには目立つように異なる色が適用されています。

そうは言っても、非常に基本的なセル スタイルのセットだけを適用したシートを作成して、そこから微調整してみてください。

// Let's test with Arial, 10pt
Font testFont = workbook.createFont();
testFont.setFontName("Arial");
testFont.setFontHeightInPoints((short)10);

// We'll apply a very bare-bones style to our cells that just applies the Font
CellStyle testCellStyle = workbook.createCellStyle();
testCellStyle.setFont(testFont);

// Your real data cell creation would go here instead of my dummy code:
CreationHelper creationHelper = workbook.getCreationHelper();
Row testRow = thisSheet.createRow(0);
int currentColumn = 0;

Cell testCell = testRow.createCell(currentColumn++);
testCell.setCellStyle(testCellStyle);
testCell.setCellType(Cell.CELL_TYPE_STRING);
testCell.setCellValue(creationHelper.createRichTextString("Cell Data Goes Here");

testCell = testRow.createCell(currentColumn++);
testCell.setCellStyle(testCellStyle);
testCell.setCellType(Cell.CELL_TYPE_STRING);
testCell.setCellValue(creationHelper.createRichTextString("Your Real Code Won't Be This Redundant :)");

最後に、autoSizeColumn列幅に対してまだ不幸なことや一貫性のないことをしている場合は、セーフティネットを追加して、列がデフォルトよりも小さくならないようにすることができます。

int origColWidth = thisSheet.getColumnWidth(currentColumn);
thisSheet.autoSizeColumn(currentColumn);

// Reset to original width if resized width is smaller than default/original
if (origColWidth > thisSheet.getColumnWidth(currentColumn))
  thisSheet.setColumnWidth(currentColumn, origColWidth);
于 2013-06-26T21:13:53.360 に答える