2

私は公式ユーザーとしては初めてです。いつもここで答えを見つけていましたが、今質問しなければなりません。

私は最後の apache-poi 3.8 リリース (2012/03/26 から) を使用しており、大量のデータ (1000 列と 10,000 行を超える) を 1 つだけ含む複数のシートで単一のファイルを操作する必要があります。

大きなシートに列を追加するだけで済みます。したがって、現在存在するツールでは、SAX を使用して読み取り、SXSSF を使用して書き直す必要があります。

Excel ファイルは、シートごとに異なるスタイルと画像で事前にフォーマットされているため、大きなシートなしでファイルのコピーを作成できると便利です。

私の質問があります: 解析せずに (入力ストリームから) SAX を使用してシートのコピーを作成するにはどうすればよいですか? ここのようにしようとしましたが、フィールドsheetsXSSFWorkbook可視性は非公開に設定されています。

素晴らしいことはSXSSFWriter.SheetIterator、POI 開発者の将来の計画にある場合、そのようなものがあることです。

読んでくれてありがとう、

アーサー

**更新* *

ファイルが大きすぎて、一般的な XSSFWorkbook として開くことができません (OutOfMemoryException)。InputStream から XSSFSheet を作成することは可能でしょうか? 次のように:

  XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader
            .getSheetsData();
    int index = 0;
    while (iter.hasNext()) {
        InputStream stream = iter.next();
        String sheetName = iter.getSheetName();
        if (!sheetName.equalsIgnoreCase("BigSheetThatIDontWant")) {
            Sheet newSheet = new XSSFSheet(stream);
            stream.close();
        }
        ++index;
    }

ご回答ありがとうございます。

4

2 に答える 2

4

ファイルを読む必要があります。

2 番目の質問については、 public java.util.Iterator<XSSFSheet> XSSFWorkbook.iterator()を参照してください。

Allows foreach loops:

 XSSFWorkbook wb = new XSSFWorkbook(package);
 for(XSSFSheet sheet : wb){

 }
于 2012-06-21T15:05:05.303 に答える
2

POI とコピー操作の経験を通じて、パフォーマンスが重要でない限り、1 つまたは複数のシートをコピーするには、ワークブック全体を読み込み、不要なシートを削除してから結果を保存する方が安全で簡単であることに気付きました。別のファイル。

そして、イテレータの Andy に +1。

于 2012-06-21T15:16:39.897 に答える