2017-05-14 11 views
0

オレンジ色で塗りつぶされたセルとテキストが与えられたセルとExcelスプレッドシートを作成するプログラムを作成しています。 PropertyTemplate。私はHSSFでこれを行うためのコードを書いていますが、現在はXSSFに取り組んでおり、動作させることはできません。Apache POIは、PropertyTemplate枠を適用するときにXSSFセルを黒で塗りつぶします。

セルは正しいオレンジ色で塗りつぶされ、テキストも正しくセルに入りますが、PropertyTemplateを適用するとオレンジ色のセルが黒くなります。誰かがこれを回避する方法を知っていますか?

ここに私のコードがあります。

XSSFCellStyle orangeFillStyle = wb.createCellStyle(); 
orangeFillStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 192, 0))); 
orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

は、その後オレンジ埋めるためにどのセルやテキストを置くためにどのセルを把握するためのコード/アルゴリズムの全体の束があり、私は、コードを使用して、細胞をハイライト:。

currCell.setCellStyle(orangeFillStyle); 

非常に

BorderStyle dividerStyle = BorderStyle.THIN; 
PropertyTemplate borderTemplate = new PropertyTemplate(); 
borderTemplate.drawBorders(new CellRangeAddress(0, 0, 0, 13), dividerStyle, BorderExtent.BOTTOM); 
borderTemplate.drawBorders(new CellRangeAddress(0, 0, 1, 13), dividerStyle, BorderExtent.TOP); 
borderTemplate.drawBorders(new CellRangeAddress(0, rowI, 1, 13), dividerStyle, BorderExtent.VERTICAL); 
borderTemplate.drawBorders(new CellRangeAddress(rowI, rowI, 0, 13), dividerStyle, BorderTextent.BOTTOM); 
borderTemplate.applyBorders(sheet); 

私はborderTemplate.applyBorders(sheet);行をコメントアウトした場合、塗りつぶしの色がうまくなりますシート作成の最後には、PropertyTemplate(ボーダー)のコードです。明らかに、もし私がそれをしたら、私は自分のシートにいかなる境界線も持っていません。それは私がカスタムの塗りつぶしの色と境界線を同時に持つことができないようなものです。なぜこれが起こっているのか、その周りの道を知っていますか?

カスタムカラーの代わりにIndexedColorを使用すると、塗りつぶしと境界線がうまく機能することに注意してください。唯一の問題は、インデックス付きの色が気に入らないことです。

XSSFCellStyle orangeFillStyle = wb.createCellStyle(); 
orangeFillStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex()); 
orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

答えて

0

まあ、それは、Apache POIのバグだようになっています。ここで私はIndexedColorに使用するコードです。少し前に誰かがバグトラッカーに投稿したことに気付きましたが、それはまだバージョン3.16にあります。

誰かがこの問題に遭遇した場合、私の回避策はカスタムのオレンジでセルを塗りつぶす前にPropertyTemplate(枠線)を置くことでした。それは私のコードを大幅に変更することを意味しましたが、今は動作します。

+0

これはバグではなく不完全です。 'PropertyTemplate'と' CellUtil'は 'ss.usermodel'レベルのみに基づいており、' xssf.usermodel'レベルにはありません。しかし、[org.apache.poi.ss.usermodel.CellStyle](https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellStyle.html)は 'setFillForegroundColor色の色) '。 'setFillForegroundColor(short bg)'しか知りません。したがって、 'ss.usermodel'レベルでは、今までは' Color'を塗りの前景色として設定することはできません。 「短い」(カラーインデックス)のみが可能である。 –

関連する問題