ApacheのPOIでの負のセル値のスタイル
-
06-09-2019 - |
質問
currentlly私が使用している、私はセルスタイルを持つ小さな問題を抱えているし、ドキュメントを生成するようにApache POIを使用します:
CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00"));
正の数には全く正常に動作します、しかし、私は自動的に陰性細胞に別のスタイルを割り当てたい。
質問は、任意の個々のセルの値をチェックし、それらに別のスタイルを割り当てることなく、これを設定することがありますか?
または代わりにその負のいずれかのオプションを使用してExcelの通貨形式で構築された使用するようにApache POIを伝えるためにどのような方法があるのでしょうか?
解決
それを見つけ、感謝私:D
CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00;[Red]($#,##0.00)"));
他のヒント
なぜPOIがExcelの通貨のフォーマットの最初のオプションをサポートすることを拒否私を超えています! "ここに画像の説明を入力し、" の
私はあなたの最後のセルの値は、通貨記号の導入により非数値となりますので、通貨のためのDecimalFormatを使用して好きではありません。大手金融機関のために働いている間、私はこのフォーマットの問題を解決する使命を帯びました。 POIは合理的であるとExcelのネイティブのオプションの包括的なサポートを持っていることを拒否しているため、この変更の核となるアイデアは、ですが、私は自分のコードに潜入し、コアでそれらの値を変更します。以下は、私の回避策です。
private static final String CURRENCY_FORMAT_OVERRIDE = "\"$\"#,##0.00_);-\"$\"#,##0.00";
private static final String CURRENCY_FORMAT_TARGET = "\"$\"#,##0.00_);(\"$\"#,##0.00)";
static { // static class level initializer
Field field = org.apache.poi.ss.usermodel.BuiltinFormats.class.getDeclaredField("_formats");
field.setAccessible(true);
String[] _formats = (String[])field.get(new org.apache.poi.ss.usermodel.BuiltinFormats());
for(int i = 0; i < _formats.length; ++i) {
if(_formats[i].equals(CURRENCY_FORMAT_TARGET)) {
_formats[i]=CURRENCY_FORMAT_OVERRIDE;
System.out.println("TAKE THAT, POI!!!");
}
}
}
所属していません StackOverflow