あなたが説明した正確な問題を経験し、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);