今回は色のカスタマイズ (Custom colors) です(一覧)。
Java コード
色のカスタマイズの仕方は HSSF と XSSF とでかなり違うようです。 まずは HSSF の方から。
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFRow row = sheet.createRow((short) 0); HSSFCell cell = row.createCell((short) 0); cell.setCellValue("Default Palette"); //apply some colors from the standard palette, // as in the previous examples. //we'll use red text on a lime background HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.LIME.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = wb.createFont(); font.setColor(HSSFColor.RED.index); style.setFont(font); cell.setCellStyle(style); //now, let's replace RED and LIME in the palette // with a more attractive combination // (lovingly borrowed from freebsd.org) cell.setCellValue("Modified Palette"); //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 ); //replacing lime with freebsd.org gold palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102);
ワークブック (HSSFWorkbook) からパレットに対応する HSSFPalette オブジェクトを取得して、色のカスタマイズを行います。 HSSF で扱える色は HSSFColor クラスに定数として定義されているようです。
次は XSSF のバージョン。
XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell( 0); cell.setCellValue("custom XSSF colors"); XSSFCellStyle style1 = wb.createCellStyle(); style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128))); style1.setFillPattern(CellStyle.SOLID_FOREGROUND);
色を表すのに AWT の Color オブジェクトが使えます。 ただし、直接ではなく XSSFColor オブジェクトを生成して、それを CellStyle オブジェクトにセットする必要がありますが。 まぁ、HSSF よりは簡単ですかね。
PoiBuilder による構築
では PoiBuilder による構築方法を見ていきましょう。 まずは HSSF の場合。
@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/') @Grab('org.waman.tools:poi-builder:0.0.5') import org.waman.tools.poi.PoiBuilder import org.apache.poi.hssf.util.HSSFColor def builder = new PoiBuilder() def workbook = builder.hssfworkbook{ sheet{ row(0){ cell(0, cellValue:'Default Palette', cellStyle:cellStyle( fillForegroundColor:HSSFColor.LIME.index, fillPattern:SOLID_FOREGROUND, font:font(color:HSSFColor.RED.index))) } } customPalette{ setColorAtIndex(HSSFColor.RED.index, (byte)153, (byte)0, (byte)0) setColorAtIndex(HSSFColor.LIME.index, (byte)255, (byte)204, (byte)102) } }
customPalette ノード*1によって HSSFPalette オブジェクトを取得し、その子ノードでそのオブジェクトのメソッドを呼び出してます。 どんなメソッドがあるかは API ドキュメントを参照のこと。 HSSFColor クラスに定義されている定数は PoiBuilder のプロパティとして取得できるようにはしていません。
次は XSSF の場合。 poi-builder 0.0.5 から OOXML への依存性 (XSSF を使うのに必要) は transitive に解決されるようにしました。 Grape などで依存性を解決する場合、別途 OOXML への依存性を付加する必要はありません。 で、ビルダーの方は以下のようになります:
@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/') @Grab('org.waman.tools:poi-builder:0.0.5') import org.waman.tools.poi.PoiBuilder def builder = new PoiBuilder() def workbook = builder.xssfworkbook{ sheet{ row(0){ cell(0, cellValue:'XSSF colors', cellStyle:cellStyle(fillForegroundColor:color(128, 0, 128), fillPattern:SOLID_FOREGROUND)) } } }
XSSFColor オブジェクトは color ノードによって取得できるようにしてます。
作成されるスプレッドシート
HSSF
XSSF
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (152件) を見る
*1:poi-builder 0.0.5 の実装では、実際には customPalette メソッドにクロージャを渡してるんですが。