6

をどうやって得るbackground colorXSSFCell。使ってみXSSFCellStyleましたがダメでした。

FileInputStream fis = new FileInputStream(fileName);
XSSFWorkbook book = new XSSFWorkbook(fis);
XSSFSheet sheet = book.getSheetAt(0);
XSSFRow row = sheet.getRow(0);

System.out.println(row.getCell(0).getCellStyle().getFillForegroundColor());

これらの手順を使用すると、Shortタイプで背景色の表現を取得できません。

4

5 に答える 5

3

この URL を確認してください:

https://issues.apache.org/bugzilla/show_bug.cgi?id=45492

Cell cell = row.getCell(1);
            CellStyle cellStyle = cell.getCellStyle();          
            System.out.println("color = " + getColorPattern(cellStyle.getFillForegroundColor()));




private short[] getColorPattern(short colorIdx){        
    short[] triplet = null;
    HSSFColor color = palette.getColor(colorIdx);
    triplet = color.getTriplet();       
    System.out.println("color : " + triplet[0] +"," + triplet[1] + "," + triplet[2]);
    return triplet;
}

これはRGBコードを返しますが、正確なものではありません。ただし、XLS カスタム カラー ピッカーの実際のカラー コードと比較すると、多かれ少なかれ同じ色が返されます。

于 2013-12-30T07:55:20.103 に答える
0

以下は Scala でのものですが、オブジェクト モデルから色を取得する方法を正確に示しています。実際の rgb 値から java.awt.Color オブジェクトをインスタンス化したかったのです (ブレークポイントで停止したときにデバッガーがオブジェクトの実際の色を表示するため、また、これがシステムへのエクスポート用であるため、これは便利です)。エクセルとは関係ありません)。色のアルファ値を無視しており、私の Scala は少しナイーブかもしれません。これがうまくいかない場合は、ブレークポイントを設定し、 getFillBackgroundColorColor() などの密接に関連するメソッド呼び出しの結果を調べることをお勧めします

val rgb: Array[Byte] = cell.getCellStyle.getFillForegroundColorColor.getRgb
def toInt(b: Byte): Int = {
  if (b<0) 256+b else b
}
val rgbInts = rgb.map(toInt)
val color = new Color(rgbInts(0),rgbInts(1),rgbInts(2))
于 2015-10-06T10:40:55.967 に答える
0

私はscalaで作業していますが、同じです。あなたのコードは正しいです。

これは私のものです。違いを見つけることができるかどうかを確認してください。

val wb = new XSSFWorkbook(path)
for (id <- 0.until(sheetTot)) {
    val sh = wb.getSheetAt(id)    
    print(sh.rowIterator().next().cellIterator().next().getCellStyle().getFillBackgroundColor())
}

私の場合、結果は64です

于 2013-10-21T10:59:59.043 に答える