質問

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の通貨のフォーマットの最初のオプションをサポートすることを拒否私を超えています! loading="lazy" "ここに画像の説明を入力し、"

私はあなたの最後のセルの値は、通貨記号の導入により非数値となりますので、通貨のための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!!!");
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top