1

POI 3.8 バージョンを使用しており、Excel シート (XLS) のセルの背景色を読み取ろうとしています。理想的には、このセルをスタイル付きで別のシートにコピーしたかったのです。cloneFrom (..)メソッドを実行すると、正しい色がターゲット シートにコピーされません。

セルの背景色を個別に読み取ろうとすると、正しい RGB 値が得られません。正しい RGB 値を取得できれば、カスタム パレットを作成して、それをターゲット シートのセルに設定できます。

セルから背景色を読み取る正しい方法はありますか?

私は次のことを試しました

cell.getCellStyle().getFillBackgroundColor()
cell.getCellStyle().getFillBackgroundColorColor().getTriplet() 

上記の行は 159/200/222 の RGB 値を与えるはずですが、51/204/204 という間違った値を与えています。

誰かが同じことを手伝ってくれませんか。このフォーラムで考えられるすべての回答を確認しましたが、まだ欲しいものを得ることができませんでした。

4

1 に答える 1

3

問題は、HSSF がカラー パレット (基本的には色の配列) を使用して RGB 値を定義することです。したがって、背景色は実際にはパレットへのインデックスです。セルの背景色の実際の RGB 値を取得するコードを次に示します。

    CellStyle style = cell.getCellStyle();
    short colorIdx = style.getFillForegroundColor();
    HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette();
    HSSFColor color = palette.getColor(colorIdx);
    short [] triplet = color.getTriplet();
    // triplet will contain the actual rgb values

出力スプレッドシートでは、カスタム カラーをパレットに追加する必要があります。出力のパレットに空きスペースがある場合は、HSSFPalette.addColor を使用できます。それ以外の場合は、HSSFPalette.setColorAtIndex を使用して、使用されていない既存の色を置き換える必要があります。カスタム カラーを追加したら、CellStyle.setFillBackgroundColor を使用してセルの背景色を設定し、作成したカスタム カラーのインデックスを渡します。

HSSF (xls) ファイルの代わりに XSSF (xlsx) ファイルを使用できる場合は、カラー パレットをいじる必要はありません。実際の RGB 値を使用できます。

于 2012-06-20T17:48:27.797 に答える