0

poi.apache を使用して xslx ワークブックを読んでいて、セルの RGB カラー コードを取得したいと考えています。XSSFColor から RGB コードを取得しようとすると、そこに色があることがわかっていても、null が返されます。

for(int k = 0; k < r.getLastCellNum(); k++) {
    XSSFCellStyle ce = (XSSFCellStyle) r.getCell(k, Row.RETURN_NULL_AND_BLANK).getCellStyle();
    XSSFColor col = ce.getFillBackgroundXSSFColor();
    byte[] rgb = col.getARgb(); //null
}

内側の CTColor オブジェクトを取得しても役に立ちません。また、null を返します。

 byte[] ctRgb = col.getCTColor().getRgb(); // null

他の誰かがこの問題に遭遇したり、解決策を持っていますか?

編集

Creakazoid が指摘したように、Background と Foreground を切り替えると、多くの問題が解決しました。しかし、今私が得ている問題は、グレーのグラデーションです。

たとえば、暗いグレーは黒 (FF000000) として返され、明るいグレーは白 (FFFFFFFF) として返されます。実際のグレーのカラーコードを入手できますか?

4

2 に答える 2

2

なぜこれがそうなのかはわかりませんが、必要なのは fill foregroundであり、 fill backgroundではありません。

交換:

XSSFColor col = ce.getFillBackgroundXSSFColor();

と:

XSSFColor col = ce.getFillForegroundXSSFColor();

私は Excel 2010 でテストしましたが、これは期待どおりに機能し、「背景」色を報告します。文言はテキストの色を報告しているように見えるかもしれませんが、実際にはorg.apache.poi.ss.usermodel.Fontの color プロパティを使用して制御されます。

于 2013-02-28T20:13:33.633 に答える
0

今の問題は、私の色が「濃い灰色」のときに黒(FF000000)になり、明るい灰色のときに白(FFFFFFFF)になることです。より具体的なカラーコードを取得する方法はありますか?

回避策を見つけました:

XSSFColor color = ce.getFillForegroundXSSFColor();
byte[] rgb = color.getRgbWithTint();
if (rgb == null) {
     rgb = color.getRgb();
}
于 2015-04-29T07:07:46.180 に答える