0

各レコードが日付と値で構成される約 2000 レコードを表示できる Apache POI を使用して Excel を生成したいと考えています。

この Excel を適切に書式設定し、セルの背景に色を付け、適切な数値書式を適用したいと考えています。

これらのタスクは両方とも実行できますが、必要なほど効率的に書式設定を行うことはできません。

フォーマットを適用するために私が試した 3 つの方法は次のとおりです。 3 つの方法はすべて、事前にフォーマットされた Excel テンプレートを使用します。ただし、問題は、Excel でどの程度の書式設定を行い (および書式設定を適用するか)、Java でどの程度行うかです。

方法 1 : Excel 自体で 1 つの行を書式設定し、Java コードを使用して書式設定をコピーします。例えば:

Row existingRow = mySheet.getRow(4);
Cell existingCell = existingRow.getCell(0);
CellStyle currentStyle = existingCell.getCellStyle();

for (int w = 0; w < refData.size(); w++) {
    MyValues aa = refData.get(w);
    Row r = CellUtil.getRow(w + 4, mySheet);
    CellUtil.getCell(r, 0).setCellValue(aa.getMarketDate());
    if (w>0) {
         CellUtil.getCell(r, 0).setCellStyle(currentStyle);
    }

方法 2 : Excel で必要な形式を含むセルを選択し、必要な領域 (2000 行) に貼り付けてから、Apache POI を使用してデータを入力するだけです

方法 3 : Excel を使用して列に書式を適用し、Apache POI を使用してデータを入力するだけです。

3 番目の方法は、(a) Excel で事前に書式設定するだけで Java コードのプログラミングを開始する必要がないため、私にとってははるかに望ましい方法です [実際の問題には、1 列だけでなく、数十列が含まれることに注意してください]。 (b) 列に書式を適用すると、ワークブックが使用するメモリの点で非常に有利です。

唯一の問題は、フォーマットがコピー アンド ペーストされたセルに Apache POI が書き込むと、正常に表示されることです。書式が列に適用されているセルに書き込むと、貼り付ける前に書式が削除されます。

これを回避する方法はありますか?Apache POI は各行を個別に考慮して機能するため、そうではないと思います。たとえば、列にフォーマットを適用するには、列の各セルに個別にフォーマットを適用する必要があります

4

2 に答える 2

0

1 つの方法は、VBA マクロを使用して、ワークブックを開いたときに列に書式を適用することです。

Private Sub Workbook_Open()
   'column formatting
End Sub

ただし、明らかにこれには、ユーザーがマクロを有効にする必要があるという欠点があります。

于 2013-08-11T15:25:32.630 に答える
0

「ガイド」セルからスタイルを読み取り、それを列に適用する必要があります。このようにして、新しいセルはそれをスタイルとして取得します。

例えば。(値の書き込みを開始する前に 1 回)

Row guideRow = mySheet.getRow(0);
for (int ii = 0 ; ii < row.getNumColumns; ++ii) {
  CellStyle currentStyle = row.getCell(ii).getCellStyle();
  mySheet.setDefaultColumnStyle(ii, currentStyle);
}
于 2015-04-22T16:26:25.507 に答える