Apache POI セル背景色を取得する

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 は、 XSSFColorHFFSColor のベースになるクラスです。

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の色だけが設定されているって感じのようです。

タイトルとURLをコピーしました