QA@IT

Apache POI で、フォントの色を取得する方法について

6888 PV

いつもお世話になっております。

Apache POI で、シートを別ブックにコピーする際に、フォントの色をコピーしたいと思っています。

環境
Java 6
Apache POI poi-3.9-20121203
Excel 2010

フォントの色はFont#getColorで取得していますが、想定する値で取得できません。
別のメソッドで取得できるものでしょうか。

以下は、コピー元のワークブック(Excel2007以降の形式:XSSFWorkbook)にフォントの色を赤で設定して、
コピーした際の、Eclipseでデバッグしたオブジェクトの内容です。
main:color rgb="FFFF0000"のところが、main:color indexed="0"になってしまいます。

・コピー元のフォントオブジェクト

<xml-fragment xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:main="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <main:sz val="11"/>
  <main:color rgb="FFFF0000"/>
  <main:name val="MS Pゴシック"/>
  <main:family val="2"/>
  <main:scheme val="minor"/>
</xml-fragment>

・コピー先のフォントオブジェクト

<xml-fragment xmlns:main="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <main:name val="MS Pゴシック"/>
  <main:sz val="11.0"/>
  <main:color indexed="0"/>
  <main:u val="none"/>
  <main:charset val="0"/>
</xml-fragment>

Excel2003以前の形式(HSSFWorkbook)でコピー元のワークブックを作成した場合、
以下のようにフォントの色は正しく取得・設定できています。

・コピー元のフォントオブジェクト

org.apache.poi.hssf.usermodel.HSSFFont{[FONT]
    .fontheight    = 0x00DC
    .attributes    = 0x0000
       .italic     = false
       .strikout   = false
       .macoutlined= false
       .macshadowed= false
    .colorpalette  = 0x000A
    .boldweight    = 0x0190
    .supersubscript= 0x0000
    .underline     = 0x00
    .family        = 0x03
    .charset       = 0x80
    .fontname      = MS Pゴシック
[/FONT]
}

・コピー先のフォントオブジェクト

org.apache.poi.hssf.usermodel.HSSFFont{[FONT]
    .fontheight    = 0x00DC
    .attributes    = 0x0000
       .italic     = false
       .strikout   = false
       .macoutlined= false
       .macshadowed= false
    .colorpalette  = 0x000A
    .boldweight    = 0x0190
    .supersubscript= 0x0000
    .underline     = 0x00
    .family        = 0x00
    .charset       = 0x80
    .fontname      = MS Pゴシック
[/FONT]
}

他にも以下のようなメソッドが想定する値で取得できないのですが、
同じ原因かと思っています。
CellStyle#getBottomBorderColor
CellStyle#getFillForegroundColor

よろしくお願いいたします。

回答

いつもお世話になっております。

自分で行ってみた結果です。
インターフェースのメソッドでは取得できなそうでしたので、実装のほうから取得しました。

XSSFFont#getXSSFColorで取得しました。
Excelでテーマの色を設定していると、上記のメソッドでは取得できなかったため、
XSSFFont#getThemeColorで取得してみました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。