3

Apache POI が提供するイベント API を使用して、Excel シートの結合領域 (結合セル) を取得するにはどうすればよいですか?

「従来の」DOM に似た解析スタイルを使用して、 と と呼ばれるメソッドがSheet.getNumMergedRegions()ありSheet.getMergedRegion(int)ます。残念ながら、(このプロジェクトで) 使用できる最大の Xmx 値を使用しても、メモリ不足エラーが発生する巨大な Excel ファイルを処理する必要があります。イベントAPIを使いたいのですが、コンテンツを正しく「理解」するために知っておく必要がある、マージされた領域に関する情報を取得する方法を見つけることができませんでした...

ここに示す例を使用します: http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api マージされた領域の各セルのイベントを取得します (最初のセルのみにテキスト コンテンツが含まれます)。したがって、より直接的な方法がない場合は、それらの結合されたセルを他の (空の) セルと (安全に) 区別する方法を知ることが役立つでしょう...

4

3 に答える 3

3

結合されたセル情報がどこに保存されるかはわかりませんが、Excel の方法ではないため、セル データ自体には保存されないことは確かです。

セルを結合せずに単純なファイルを作成することをお勧めします。次に、コピーを取り、1 つの結合セルを追加します。これらの両方を解凍し (.xlsx は xml ファイルの zip です)、それらを比較します。これにより、セルを結合済みとしてマークするために何が設定されているかがすぐにわかります。(私の推測では、シート設定のどこかで、セルの値、BICBW の近くではなく、開始近くにあると思います)

結合されたセルの詳細がどこにあるかがわかったら、結合されたセルを操作するための XSSF UserModel コードを見て、それらがどのように機能するか、どのように操作されるか、どのようなオプションがあるかなどを理解することができます。 、詳細についてはファイル形式のドキュメントを参照してください。最後に、コードを追加して、マージされた情報の詳細を使用することができます。

于 2012-07-23T11:59:52.143 に答える
1

ストリームを開いて 2 回解析する必要があります。

初めて - 結合セルを抽出します。これらは、次の例のように、タグのsheet...xml後にファイルに表示されます。<sheetData>...</sheetData>

...
< /sheetData >
< mergeCells count="2" >
    < mergeCell ref="A2:C2"/ >
    < mergeCell ref="A3:A7"/ >
 </mergeCells >

それを抽出し、いくつかのリストに保持します。

次に、ストリームを再度開き、通常どおり解析して、行とセルを抽出します。すべての行を終了するときのendElement(...)メソッドで、この行が (部分的または完全に) マージされた領域に表示されるかどうかを確認します。

于 2015-04-08T13:28:45.407 に答える