121

私はいくつかのデータを出力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」のみが表示されます。

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

4

12 に答える 12

202

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

APIへのリンクは次のとおりです。

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

于 2011-01-06T06:05:29.100 に答える
51

ヒント:自動サイズ設定を機能させるには、データをExcelに入力したsheet.autoSizeColumn(columnNumber)にを呼び出す必要があります。

データを入力する前にメソッドを呼び出しても、効果はありません。

于 2012-03-13T07:06:18.950 に答える
46

ブック内のすべての列のサイズを自動化する場合は、次の方法が役立ちます。

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);
            }
        }
    }
}
于 2016-02-10T19:56:33.753 に答える
11

あなたはこのようなことを試すことができます:

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

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

于 2011-01-06T05:45:26.673 に答える
8

Excel POIの場合:

sheetName.autoSizeColumn(cellnum); 
于 2014-04-01T20:58:31.120 に答える
5

以下のサンプルコード

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

出力を確認して、ナットを動かしてください:)

于 2014-09-23T10:22:38.413 に答える
3

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

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
于 2017-12-13T15:08:52.310 に答える
2

私は以下の簡単な解決策を使用します:

これはあなたのワークブックとシートです:

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("YOUR Workshhet");

次に、列と行を使用してシートにデータを追加します。シートへのデータの追加が完了したら、次のコードをautoSizeColumn幅に書き込みます。

for (int columnIndex = 0; columnIndex < 15; columnIndex++) {
                    sheet.autoSizeColumn(columnIndex);
                }

ここでは、15の代わりに、シートの列数を追加します。

誰かがこれを助けてくれることを願っています。

于 2020-02-11T10:15:25.927 に答える
1

ループの後にこれを追加できます。

for (int i = 0; i<53;i++) {
    sheet.autoSizeColumn(i);
}
于 2020-11-10T16:46:39.283 に答える
0

setColumnWidth()セルをさらに拡張したい場合に使用できます。

于 2016-10-06T16:10:47.080 に答える
0

非常に単純です。この1行のコードを使用してくださいdataSheet.autoSizeColumn(0)

または、括弧内の列番号を指定しますdataSheet.autoSizeColumn(cell number)

于 2017-11-08T11:32:33.867 に答える
0

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

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);
于 2018-12-14T12:19:55.270 に答える