前景色と背景色
セルに対する前景色と背景色のスタイルを設定する方法を確認します。なおここで前景色というのはセルに表示される文字の色ではありません。セルは前景色で指定した色の上に、パターン種別と背景色で作成されたパターンが表示されます。
前景色を設定するにはCellStyleインターフェースで用意されているsetFillForegroundColorメソッドを使います。
void setFillForegroundColor(short bg)
set the foreground fill color Note: Ensure Foreground color is set prior to background color. Parameters: bg - color
背景色を設定するにはCellStyleインターフェースで用意されているsetFillBackgroundColorメソッドを使います。
void setFillBackgroundColor(short bg)
set the background fill color. Parameters: bg - color
どちらのメソッドも引数には色を表すshort型の値を指定します。
標準パレットに含まれている色については「org.apache.poi.ss.usermodel.IndexedColors」にて列挙型として定義されています。
AQUA AUTOMATIC BLACK BLUE BLUE_GREY BRIGHT_GREEN BROWN CORAL CORNFLOWER_BLUE DARK_BLUE DARK_GREEN DARK_RED DARK_TEAL DARK_YELLOW GOLD GREEN GREY_25_PERCENT GREY_40_PERCENT GREY_50_PERCENT GREY_80_PERCENT INDIGO LAVENDER LEMON_CHIFFON LIGHT_BLUE LIGHT_CORNFLOWER_BLUE LIGHT_GREEN LIGHT_ORANGE LIGHT_TURQUOISE LIGHT_YELLOW LIME MAROON OLIVE_GREEN ORANGE ORCHID PALE_BLUE PINK PLUM RED ROSE ROYAL_BLUE SEA_GREEN SKY_BLUE TAN TEAL TURQUOISE VIOLET WHITE YELLOW
色を表すインデックスを取得するには、IndexedColorsで定義されているgetIndexメソッドを使います。
public short getIndex()
Returns index of this color Parameters: index of this color
実際の使い方は次のようになります。
Workbook wb = new HSSFWorkbook(); CellStyle style = wb.createCellStyle(); style.setFillForegroundColor(IndexedColors.MAROON.getIndex()); style.setFillBackgroundColor(IndexedColors.SKY_BLUE.getIndex());
これで前景色に「MAROON」、背景色に「SKY_BLUE」が設定されたスタイルが作成されました。
なお背景色とパターンの設定については次のページで詳しく確認します。次のサンプルではパターンとして「SOLID_FOREGROUND」を指定し、前景色で塗りつぶすように指定しています。
サンプルプログラム
実際に試してみましょう。
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import java.io.*;
public class Sample2_1{
public static void main(String[] args){
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row1 = sheet.createRow(1);
Cell cell1_0 = row1.createCell(0);
Cell cell1_1 = row1.createCell(1);
Cell cell1_2 = row1.createCell(2);
cell1_0.setCellValue("MAROON");
cell1_1.setCellValue("RED");
cell1_2.setCellValue("AQUA");
CellStyle style1 = wb.createCellStyle();
style1.setFillPattern(CellStyle.SOLID_FOREGROUND);
style1.setFillForegroundColor(IndexedColors.MAROON.getIndex());
CellStyle style2 = wb.createCellStyle();
style2.setFillPattern(CellStyle.SOLID_FOREGROUND);
style2.setFillForegroundColor(IndexedColors.RED.getIndex());
CellStyle style3 = wb.createCellStyle();
style3.setFillPattern(CellStyle.SOLID_FOREGROUND);
style3.setFillForegroundColor(IndexedColors.AQUA.getIndex());
cell1_0.setCellStyle(style1);
cell1_1.setCellStyle(style2);
cell1_2.setCellStyle(style3);
FileOutputStream out = null;
try{
out = new FileOutputStream("sample2_1.xls");
wb.write(out);
}catch(IOException e){
System.out.println(e.toString());
}finally{
try {
out.close();
}catch(IOException e){
System.out.println(e.toString());
}
}
}
}
3つのセルに対してそれぞれ別のスタイルを作成し設定しています。それでは作成されたExcelファイルを開いてみます。
今回は前景色で塗りつぶすパターンを指定していますので、前景色だけを指定しています。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。