0

ここでちょっとした問題があって、どうにもできません。

問題は、Java のプロジェクトに POI を使用していて、最終的な出力を .xls 形式 (Apache の場合は HSSF) で取得する必要があることです。

したがって、私のビジネス ルールでは、生成する各ファイルの最大ファイル サイズは 12 MB でなければならないと定めています。

しかし、.xls にはデータを処理する内部的な方法 (私が推測する XML) があることを知っているので、結果をプレーン テキスト ファイルに入れるよりも多くのバイトが追加されます。Excelワークブックは一時的な場所に生成されるため(見つけることができません)、書き込み中に読み取ることができないため、Excelワークブックのサイズを取得できません。

Java が HSSF ワークブック オブジェクトを使用して Excel 出力ファイルのサイズをバイト単位で取得する方法はありますか?

4

2 に答える 2

0

さて、API に関するいくつかの調査の後、getBytes() というメソッドがワークブック上のすべてのデータ (シート、行、データなど) のバイト配列を返すことがわかったので、長さを使用すると非常に近い値が返されます。ユーザーが使用した最終的なワークブックによって生成されたバイト。

于 2012-10-11T17:54:33.510 に答える
0

最善の策は、おそらく定期的にファイルを書き出して、そのサイズを確認することです。ファイルの大きさを確実に知る唯一の方法は、ファイルを書き出すことです...

HSSF では、すべてのセルが同じサイズになるわけではありません。文字列セルは数値セルとはサイズが異なり、数式セルは演算子とその中の値の数によって異なり、文字列セルは前のセルと同じテキストを使用しているかどうかによって異なります。追加するものの種類に基づいた大まかな推測 (セル スタイル、名前付き範囲、画像などを考慮することを忘れないでください)。

XSSF の場合はさらに複雑です。XML では、異なるセルが異なる量の文字を使用するだけでなく (HSSF の場合と同様)、.xlsx ファイル形式は圧縮された形式です。そのため、XML の同じスニペットを記述すると、圧縮アルゴリズムがそれを管理する方法に基づいて、出力ファイルにさまざまな量のスペースが必要になる可能性があります。(たとえば、最初のものは後続のものよりも多くかかります)。そのため、保存してテストしない限り、確実であるという望みはさらに少なくなります。繰り返しますが、大まかな推測を思い付くことができるかもしれませんが、確実にする唯一の方法は、保存して確認することです。

予測可能なファイル サイズが必要な場合は、.CSV ファイルなど、純粋にテキスト ベースのものを使用する必要があります。

于 2012-10-10T22:07:13.723 に答える