2013-11-25 15 views
11

私は、最新のApache poiを使って30列と100万のレコードで大きなエクセル2010を作成しようとしています。このリンクに記載されているように私はhttp://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.javaを作成しています。列幅を列ヘッダーのテキストサイズと同じにする必要があります。しかし、ときに私は、コードapache poiは大きなオートコラムの幅に匹敵する

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

それは膨大な時間がかかっているとも、5ギガバイトのヒープサイズと私はメモリ不足に取得しています次のExcel作成した後にこれをやっています。

おかげ

ラム

+0

なぜSXSSFを使用していないのですか?これは、BigGridのデモ用の新しい代替品です – Gagravarr

+0

はい、SXSSFが将来のプロジェクトで使用することを見て.....後で知り合うようになる –

+0

同じ問題に直面しています!あなたは最終的に何をしましたか? –

答えて

29

まずヘッダだけはあなたに行のセルの最大数を与えることができますので、最初の行またはヘッダを選択します。

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

そしてこれは、そのヘッダの幅と同一の列幅を設定し、その行の各列

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

autoSizeColumnを使用します。

4

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

3

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

関連する問題