web-dev-qa-db-ja.com

Apache poi Excelの大きな自動列幅

最新のApache poiを使用して、30列と100万レコードの大きなExcel 2010を作成しようとしています。このリンクに記載されているとおりに作成しています http://svn.Apache.org/repos/asf/poi/trunk/src/examples/src/org/Apache/poi/xssf/usermodel/examples/BigGridDemo。 Java 。ただし、列幅を列ヘッダーのテキストサイズと同じにする必要があります。しかし、次のコードでExcelを作成した後にこれをしているとき

for (int x = 0; x < sheet.getRow(0).getPhysicalNumberOfCells(); x++) {
            sheet.setColumnWidth(x, 20*256);
        }

膨大な時間がかかり、5GBのヒープサイズでもメモリ不足になります。

ありがとう

12

ヘッダーのみが行の最大セル数を提供できるため、最初の行またはヘッダーを選択します。

HSSFRow row = wb.getSheetAt(0).getRow(0);

次に、その行の各列でautoSizeColumnを使用します

for(int colNum = 0; colNum<row.getLastCellNum();colNum++)   
    wb.getSheetAt(0).autoSizeColumn(colNum);

これにより、ヘッダーの幅と同じ列幅が設定されます。

31
Sankumarsingh

Sxssfの使用を検討することもお勧めします。 xml形式を使用してExcelに読み込みます。これははるかに高速で、大きなレポートやグリッドを作成するためのより良い方法です。 xssfの自動サイズ調整機能は、デフォルトでは時間がかかりすぎます。

4
Adi Kish

sheet.autoSizeColumn(columnNumber)は機能します。これにより、列のサイズがセルの最大長に変更されます。

3
Nilesh