11

アクセスして値を読み取っている既存のExcelスプレッドシートがあり、Apache POI HSSFを使用しています。

次のように初期化されます。

HSSFSheet sheet;
FileInputStream fis = new FileInputStream(this.file);
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
this.sheet = wb.getSheet(exsheet);

シートに存在するすべてのセルを反復処理しているため、セル オブジェクトが作成されます。

HSSFCell cell = (HSSFCell) cells.next();

フレームワークに詳しい人が、(HSSFColor) オブジェクトを作成してシート内の各セルの背景色を表す方法を説明してください。

どうもありがとう

編集、更新

私が知りたいことを明確にするために、既存のセルの背景色のHSSFColorオブジェクトを作成/取得するにはどうすればよいですか?

cell.getCellStyle().getFillBackgroundColor(); 

このコードは、HSSFColor オブジェクトではなく、短い数値のみを返します。これまでの回答に感謝します。

4

8 に答える 8

7

HSSFCell クラスによって提供される静的な色のクラスがあり、以下にリストされています。

http://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html

独自のカスタム カラーを作成する場合は、カスタム パレットを作成して変更する必要があります。Apache は、これについても非常に明確なガイドを提供しています。

http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors

于 2009-09-30T18:21:59.353 に答える
5

色を取得するには: getFillBackgroundColor によって返される短い値は、色の Excel インデックスです。RMorrisey が示した最後のコードを使用して、HSSFColor HashTable のインデックスに対応する色を取得できます。

色を設定するには : カスタム パレットを作成し、特定のインデックスで色を変更します。次に、スタイルに色を適用します。

//creating a custom palette for the workbook
HSSFPalette palette = wb.getCustomPalette();
//replacing the standard red with freebsd.org red
palette.setColorAtIndex(HSSFColor.RED.index,
        (byte) 153,  //RGB red (0-255)
        (byte) 0,    //RGB green
        (byte) 0     //RGB blue
);
// or creating a new Color
HSSFColor myColor = palette.addColor((byte) 153, (byte) 0, (byte) 0); 
HSSFCellStyle style = wb.createCellStyle();

style.setFillForegroundColor(myColor);

よろしく

ギヨーム

于 2009-10-12T14:41:18.967 に答える
2

XSSFCellStyle の backgroundcolor 情報は、次のメソッドから取得できます。

XSSFCellStyle.getFillForegroundXSSFColor().getCTColor()

プリントアウトすると、その構造を確認できます。

于 2012-08-05T04:08:37.817 に答える
1

特定のセルの背景色を HEX で取得するには、次のようにします。

cell.getCellStyle().getFillForegroundColorColor().getARGBHex()

単語Colorが 2 回使用されていることに注意してください

于 2014-12-23T14:40:59.390 に答える
1

あなたは次のようなことをします:

HSSFCell myCell = ...;
HSSFCellStyle myStyle = workbook.createCellStyle();
myStyle.setFillBackgroundColor(HSSFColor.BLUE);

myCell.setCellStyle(myStyle);

特定のワークブックのスタイルの数は限られていると思います。可能であれば、同じスタイル オブジェクトを再利用する必要があります。

[編集: 申し訳ありませんが、それはセルに色を設定することです。色を取得するには、次のように使用します。

myCell.getCellStyle().getFillBackgroundColor();

]

[編集 2: craig が投稿したカスタム カラー情報を見ると、試してみることができるかもしれません:

HSSFColor.getIndexHash().get(myCell.getCellStyle().getFillBackgroundColor())

]

于 2009-09-30T18:21:20.690 に答える
0

以下は XSSF 用であり、Scala にありますが、オブジェクト モデルから色を取得する方法を正確に示しています。実際の rgb 値から java.awt.Color オブジェクトをインスタンス化したかった (これは、ブレークポイントで停止したときにデバッガーがオブジェクトの実際の色を表示するため、また、これがシステムへのエクスポート用であるため、便利です)。エクセルとは関係ありません)。色のアルファ値を無視しており、私の Scala は少しナイーブかもしれません。これがうまくいかない場合は、ブレークポイントを設定し、getFill Back groundColorColor()などの密接に関連するメソッド呼び出しの結果を調べることをお勧めします。

    val rgb: Array[Byte] = cell.getCellStyle.getFillForegroundColorColor.getRgb
    def toInt(b: Byte): Int = {
      if (b<0) 256+b else b
    }
    val rgbInts = rgb.map(toInt)
    val color = new Color(rgbInts(0),rgbInts(1),rgbInts(2))
于 2015-10-06T10:37:19.277 に答える