2017-07-16 83 views
0

カスタム(hexcodeまたはrgb値から)の色をxssfcellに設定しようとしています。他の色を付けても、セルの色が黒くなっています。私は、次の方法でこれをやって試してみました:XSSFCell Apache POIでカスタム色を設定できません

File xlSheet = new File("C:\\Users\\IBM_ADMIN\\Downloads\\Excel Test\\Something3.xlsx"); 
    System.out.println(xlSheet.createNewFile()); 
    FileOutputStream fileOutISPR = new FileOutputStream("C:\\Users\\IBM_ADMIN\\Downloads\\Excel Test\\Something3.xlsx"); 
    XSSFWorkbook isprWorkbook = new XSSFWorkbook(); 
    XSSFSheet sheet = isprWorkbook.createSheet("TEST"); 
    XSSFRow row = sheet.createRow(0); 
    XSSFCellStyle cellStyle = isprWorkbook.createCellStyle(); 
    byte[] rgb = new byte[3]; 
    rgb[0] = (byte) 24; // red 
    rgb[1] = (byte) 22; // green 
    rgb[2] = (byte) 219; // blue 
    XSSFColor myColor = new XSSFColor(rbg); 
    cellStyle.setFillForegroundColor(myColor); 
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    cellStyle.setAlignment(HorizontalAlignment.CENTER); 
    XSSFCell cell = row.createCell(0); 
    cell.setCellValue("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has"); 
    cell.setCellStyle(cellStyle); 
    CellRangeAddress rangeAddress = new CellRangeAddress(0, 0, 0, 2); 
    sheet.addMergedRegion(rangeAddress); 
    int width = ((int)(90 * 0.73)) * 256; 
    sheet.setColumnWidth(cell.getColumnIndex(), width); 
    //sheet.autoSizeColumn(cell.getColumnIndex()); 
    RegionUtil.setBorderBottom(XSSFCellStyle.BORDER_MEDIUM, rangeAddress, sheet, isprWorkbook); 
    RegionUtil.setBottomBorderColor(IndexedColors.RED.getIndex(), rangeAddress, sheet, isprWorkbook); 

    XSSFCell cell2 = row.createCell(11); 
    cell2.setCellValue("222222222222222"); 
    isprWorkbook.write(fileOutISPR); 

//プログラム

XSSFCellStyle cellStyle = isprWorkbook.createCellStyle(); 
    byte[] rgb = new byte[3]; 
    rgb[0] = (byte) 24; // red 
    rgb[1] = (byte) 22; // green 
    rgb[2] = (byte) 219; // blue 
    XSSFColor myColor = new XSSFColor(rgb); 
    cellStyle.setFillForegroundColor(myColor);//1st method 
    //cellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128)));//2nd method 
    //XSSFColor myColor = new XSSFColor(Color.decode("0XFFFFFF")); 
    cellStyle.setFillForegroundColor(myColor);//3rd Method 

のEND私は他の多くの関連の質問への回答に記載の方法が、私の問題を解決し、それらのどれを試してみました。 私を助けてください。

+0

ここは朝ですが、1と3の違いは何ですか?私はあなたが塗りつぶしパターンがないと思う、https://stackoverflow.com/a/31671032/180100を参照してください –

+0

確かに、私は最小限のコードで質問を更新します。ありがとう – Pranjal

+0

塗りつぶしパターンは、パターンは色が設定された後でも完全な白である行方不明だった。しかし、私の場合、フルセルは黒です。 – Pranjal

答えて

3

これは、不完全性がPackage org.apache.poi.ss.utilであるために発生します。

PropertyTemplateならびにCellUtilRegionUtil及び過ぎずxssf.usermodelレベルでss.usermodelレベルに基づいてもされています。しかしorg.apache.poi.ss.usermodel.CellStyleは今までsetFillForegroundColor(Color color)について何か知らない。それはsetFillForegroundColor(short bg)しか知りません。したがって、ss.usermodelレベルでは今まではColorを塗りの前景色として設定することはできません。 short(カラーインデックス)のみが可能です。

org.apache.poi.ss.utilを使用して境界線のみを設定するときに色を設定する必要があるのであれば、色と境界の両方が同じであるため答えが必要です。CellStyle。そのため、境界設定をCellStyleに追加するとき、色の設定を維持し、最後に新しい設定にする必要があります。

結論として、このジレンマから脱出する方法はありません。 org.apache.poi.ss.utilを使用する必要がある場合は、を同時に使用することはできません。唯一の希望はsetFillForegroundColor(Color color)で、org.apache.poi.ss.usermodel.CellStyleの後のバージョンはapache poiに追加されます。

+0

にする必要があります。これは、Apache POIのバグジルで拡張リクエストとして発行できますか?忘れられませんか?パッチのボーナスマークも.... .... – Gagravarr

関連する問題