Javaを使った、エクセル操作
この記事では、Apache POI ライブラリを使用して、セル背景色を取得する方法を記載していきます。
取得した色は、HEX文字にして出力するとわかりやすいです。
Gradle設定
Apache POIを使うプロジェクトの依存はこんな感じ。
Gradleの Kotlin DSLを使っています。
build.gradle.kts
dependencies {
// POI
implementation("org.apache.poi:poi:5.0.0")
implementation("org.apache.poi:poi-ooxml:5.0.0")
}
セル背景色取得
さっそくの Color取得コード。
Cell cell = CellUtil.getCell(row, sheet);
// FillForegroundColorを取得
// ExtendedColorにキャストしておく。
ExtendedColor color = (ExtendedColor) cell.getCellStyle().getFillForegroundColorColor();
// nullを返す事もあるので、考慮する。
if (color != null) {
// HEX文字で取得 ARGB
System.out.println(color.getARGBHex()); // FFFFFFFF
}
getFillForegroundColorColor
メソッドは、 Color
インターフェイスを返しますが、
Color
インターフェイスには何もメソッドが定義されておらず、
getFillForegroundColorColor
メソッドもないので、キャストしています。
ExtendedColor
は、 XSSFColor
や HFFSColor
のベースになるクラスです。
Alpha 要素の情報が不要であれば、 substring
で先頭2文字を切り取ればOK。
String colorHex = foreColor.getARGBHex().substring(2);
FillPatternTypeについて
ExtendedColor
には、 getFillBackgroundColorColor
というメソッドもあります。
XSSFColor backgroundColor = cell.getCellStyle().getFillBackgroundColorColor();
背景色だから、こちらを取得するんじゃないのと不思議に見えるかもしれませんが、
Foregroundがフォント色で、Backgoundが背景色というわけではないようです。
(フォント色は、Fontオブジェクト側で別途設定されている)
単色の場合、基本Foregroundの色が使われて、 FillPatternType
によって、Backgoundの色を組み合わせて、セル背景の色を構成しているようです。
FillPatternType pattern = cell.getCellStyle().getFillPattern();
単色なら、 FillPatternType
は、 SOLID_FOREGROUND(1)
になっていて、
Foregroundの色だけが設定されているって感じのようです。