web-dev-qa-db-ja.com

Apache POI Excel-列を展開するように構成する方法?

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");

このスプレッドシートを作成すると、「最初に表示されないLooooooongテキスト」文字列がセルにありますが、列が展開されないため、「Loooooooo」のみが表示されます。

スプレッドシートを開いたときに列が既に展開されているように構成するにはどうすればよいですか?

86
masato-san

すべてのデータをシートに追加した後、シートでautoSizeColumn(int column)を呼び出して、列を適切なサイズに自動調整できます。

API へのリンクがあります。

詳細については、この投稿を参照してください Apache poiを使用する場合、Excelのセルサイズをコンテンツのサイズに合わせる際の問題

153
Sean

Tip:自動サイズ調整を有効にするには、sheet.autoSizeColumn(columnNumber)への呼び出しを行う必要がありますafter Excelにデータを入力します。

データを取り込む前にメソッドを呼び出しても効果はありません。

41
Unni Kris

ブック内のすべての列のサイズを自動的に変更する場合、便利な方法を次に示します。

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);
            }
        }
    }
}
32

次のようなものを試すことができます:

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);

パラメータは次のとおりです。シート内の列番号とその幅しかし、幅の単位は非常に小さく、たとえば4000を試すことができます。

8
UVM

Excel POIの場合:

sheetName.autoSizeColumn(cellnum); 
8
Adnan Ghaffar

以下のサンプルコード

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");

出力を確認し、ナットに行く:)

4
Mateen

列の数がわかっている場合(つまり、コレクションリストに等しい)。この1つのライナーを使用して、1つのシートのすべての列を調整できます(少なくともJava 8を使用する場合)。

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
1
snap

非常にシンプルで、この1行のコードを使用しますdataSheet.autoSizeColumn(0)

または、ブラケット内の列数を指定しますdataSheet.autoSizeColumn(cell number)

テキストを折り返すこともできます。 PFBサンプルコード:

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);
0
Akash