45

セルの前景色を 16 進数コードの特定の色に設定したいと考えています。たとえば、赤に設定しようとすると:

style.setFillForegroundColor(new XSSFColor(Color.decode("#FF0000")).getIndexed());

デコード関数のパラメーターに設定した 16 進値に関係なく、getIndexed 関数は常に黒色を返します。

私が何か間違ったことをしている可能性がありますか?バグだと思いますがよくわかりません…

4

6 に答える 6

99

幸いなことに、HSSF ではなく XSSF を使用している場合、問題の解決策はかなり簡単です。スタイル変数を XSSFCellStyle にキャストするだけです。その場合、XSSFColor 引数を取る setFillForegroundColor のバージョンがあるため、getIndexed() を呼び出す必要はありません。コード例を次に示します。

XSSFCellStyle style = (XSSFCellStyle)cell.getCellStyle();
XSSFColor myColor = new XSSFColor(Color.RED);
style.setFillForegroundColor(myColor);

ただし、HSSF を使用している場合、状況はさらに難しくなります。HSSF は、単に色の配列であるカラー パレットを使用します。setFillForegroundColor に渡す短い値は、パレットへのインデックスです。

したがって、問題は RGB 値をパレット インデックスに変換することです。getIndexed() を使用して提案したソリューションは論理的ですが、残念ながら、XSSFColor に対しては、想定どおりに機能します。

幸いなことに、解決策があります。ここでは、カスタム カラーを使用するのではなく、デフォルト パレットのいずれかの色を使用して満足していると仮定します。その場合、HSSFPalette および HSSFColor クラスを使用して問題を解決できます。コード例を次に示します。

HSSFWorkbook hwb = new HSSFWorkbook();
HSSFPalette palette = hwb.getCustomPalette();
// get the color which most closely matches the color you want to use
HSSFColor myColor = palette.findSimilarColor(255, 0, 0);
// get the palette index of that color 
short palIndex = myColor.getIndex();
// code to get the style for the cell goes here
style.setFillForegroundColor(palIndex);

デフォルト パレットにないカスタム カラーを使用する場合は、それらをパレットに追加する必要があります。HSSFPalette の javadoc では、そのために使用できるメソッドが定義されています。

于 2012-06-07T01:19:17.397 に答える
17

に使用XSSFColorXSSFWorkbookます。またはXSSFColorを取ることができます。以下の例を参照してください。byte[] rgbjava.awt.Color

  1.  

    XSSFWorkbook wb = new XSSFWorkbook();
    XSSFCellStyle cellStyle = wb.createCellStyle();
    byte[] rgb = new byte[3];
    rgb[0] = (byte) 242; // red
    rgb[1] = (byte) 220; // green
    rgb[2] = (byte) 219; // blue
    XSSFColor myColor = new XSSFColor(rgb); // #f2dcdb
    cellStyle.setFillForegroundColor(myColor);
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
    
  2. GuenSevenの回答を参照してください

    XSSFColor myColor = new XSSFColor(new java.awt.Color(242, 220, 219)); // #f2dcdb
    cellStyle.setFillForegroundColor(myColor);
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
    
于 2014-12-24T00:19:55.173 に答える
0

XSSFCellStyle は、3.07 より上の poi バージョンのメソッド setFillForegroundColor で色を受け入れます...そのため、最初にバージョンを確認して、直面していた問題に巻き込まれないようにします...以前のバージョンでは引数として短い必要がありました。

于 2015-08-20T08:48:48.817 に答える