在Apache的POI负单元格值样式
-
06-09-2019 - |
题
使用Apache POI生成和我有一个小问题,单元格样式的文档时,currentlly我使用:
CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00"));
其中一期工程为正数完全正常,但是我想自动分配一个不同的风格阴性细胞。
问题是是否有任何设置此而不必检查单个电池值,并分配一个单独的样式他们?
或者或者有没有什么办法让Apache POI使用内置在Excel货币格式,其负面选项之一?
解决方案
找到它,由于我: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