Apache Poi Excel-拡張する列を構成する方法は?
-
25-09-2019 - |
質問
私は使っている Apache POI API
引き起こす excel spreadsheet
いくつかのデータを出力します。
私が直面している問題は、スプレッドシートが作成されて開かれたとき、列が展開されないため、日付形式のテキストのような長いテキストが一見表示されないようにすることです。
Excelの列ボーダーをダブルクリックしてボーダーを展開またはドラッグして列の幅を調整するだけですが、20以上の列がある可能性があり、スプレッドシートを開くたびに手動でやりたいと思うことはありません:(
私は知りました(間違った方法かもしれませんが) groupRow()
と setColumnGroupCollapsed()
トリックをすることができるかもしれませんが、運はありません。たぶん私は間違った方法でそれを使用しています。
サンプルコードスニペット
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet("masatoSheet");
//not really working yet.... :(
//set group for expand/collapse
//sheet.groupRow(0, 10); //just random fromRow toRow argument values...
//sheet.setColumnGroupCollapsed(0, true);
//create row
Row row = sheet.createRow((short)0);
//put a cell in the row and store long text data
row.createCell(0).setCellValue("Loooooooong text not to show up first");
このスプレッドシートが作成されると、「最初に表示されない」文字列はセルにありますが、列が展開されていないため、「loooooooo」のみが表示されます。
スプレッドシートを開くと、列が既に展開されているように構成するにはどうすればよいですか?
解決
後 あなたはすべてのデータをシートに追加しました、あなたは電話することができます autoSizeColumn(int column)
シート上で列を適切なサイズにオートフィットする
これが次のリンクです API.
詳細については、この投稿を参照してくださいApachePoiを使用するときに、Excelセルサイズをコンテンツのサイズに適合させる問題
他のヒント
ヒント : 自動サイズを機能させるために、コール sheet.autoSizeColumn(columnNumber)
作るべきです 後 データをExcelに入力します。
データを入力する前にメソッドを呼び出すと、効果がありません。
ワークブック内のすべての列を自動サイズにしたい場合は、ここに役立つ可能性のある方法があります。
public void autoSizeColumns(Workbook workbook) {
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
if (sheet.getPhysicalNumberOfRows() > 0) {
Row row = sheet.getRow(sheet.getFirstRowNum());
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
int columnIndex = cell.getColumnIndex();
sheet.autoSizeColumn(columnIndex);
}
}
}
}
ExcelPoiの場合:
sheetName.autoSizeColumn(cellnum);
あなたはこのようなことを試すことができます:
HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);
ここにパラメーションは次のとおりです。シートの列番号とその幅ですが、幅の単位はかなり小さく、たとえば4000を試すことができます。
以下のサンプルコード
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);
cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");
//これは重要です
sheet.autoSizeColumn(0);
//引数はセル番号でなければなりません
cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");
出力をチェックして、ナットになります:)
列のカウントを知っている場合(FEはコレクションリストに等しくなります)。この1つのライナーを使用して、1つのシートのすべての列を調整できます(少なくともJava 8を使用する場合):
IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
その非常にシンプル、この1つのラインコードデータシートを使用してください。AutosizeColumn(0)
または、bracket datasheet.autosizecolumn(セル番号)の列の数を指定します
テキストもラップできます。 PFBサンプルコード:
CellStyle wrapCellStyle = new_workbook.createCellStyle();
wrapCellStyle.setWrapText(true);
使用できます setColumnWidth()
細胞をもっと拡張したい場合。