문제

Apache POI를 사용하여 문서를 생성하고 셀 스타일에 작은 문제가 있습니다. 현재 사용 중입니다.

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 Currency 형식의 첫 번째 옵션을 지원하는 것을 거부하는 이유는 저를 넘어선 것입니다! enter image description here

통화 기호의 도입으로 최종 셀 값이 숫자가되지 않기 때문에 화폐에 대한 소수판을 사용하는 것을 좋아하지 않습니다. 주요 금융 기관에서 일하면서이 서식 문제를 해결해야했습니다. 이 변화의 핵심 아이디어는 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