2012-12-03 2 views
1

POI를 사용하여 xls-document에 도형 (특히 원)을 추가해야합니다. 그래서 다음 코드를 작성했습니다 :Apache POI HSSF : 해당 셀과 함께 크기가 조정되지 않는 모양을 추가하는 방법은 무엇입니까?

private void drawLabel(HSSFSheet sheet, HSSFCell cell) { 
    final short columnIndex = (short) cell.getColumnIndex(); 
    final int rowIndex = cell.getRowIndex(); 
    HSSFClientAnchor anchor = new HSSFClientAnchor(60, 60, 200, 200, columnIndex, rowIndex, columnIndex, rowIndex); 
    anchor.setAnchorType(ClientAnchor.MOVE_DONT_RESIZE); 
    HSSFSimpleShape shape = sheet.getDrawingPatriarch().createSimpleShape(anchor); 
    shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL); 
    ... 
} 

작동합니다. 그러나 프로그래밍 방식으로 열 너비를 변경하려고하면 (예 : sheet.setColumnWidth(0, 5 * 256); (열의 인덱스가 == 0 인 셀에 도형이 추가되었다고 가정)) 원이 왜곡되어 타원형이됩니다 (앵커의 유형은 MOVE_DONT_RESIZE으로 설정되어 있음). 내 접근 방식에서 잘못된 점은 해당 셀과 함께 크기가 조정되지 않는 모양을 그리는 방법이 있습니까?

답변

0

이 문제의 적절한 해결책을 찾지 못했습니다.

private void drawLabel(HSSFSheet sheet, HSSFCell cell) { 
    final int defaultColumnWidth = 2048; // column width before resizing 
    final int defaultRowHeight = 255; // row height before resizing 
    final double xDistortionFactor = 1.0 * defaultColumnWidth/sheet.getColumnWidth(cell.getColumnIndex()); 
    final double yDistortionFactor = 1.0 * defaultRowHeight/cell.getRow().getHeight(); 

    final int dx1 = (int) (60 * xDistortionFactor); 
    final int dy1 = (int) (60 * yDistortionFactor); 
    final int dx2 = (int) (200 * xDistortionFactor); 
    final int dy2 = (int) (200 * yDistortionFactor); 
    final short columnIndex = (short) cell.getColumnIndex(); 
    final int rowIndex = cell.getRowIndex(); 
    final HSSFClientAnchor anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2, columnIndex, rowIndex, columnIndex, rowIndex); 
    anchor.setAnchorType(ClientAnchor.MOVE_DONT_RESIZE); 

    HSSFSimpleShape shape = sheet.getDrawingPatriarch().createSimpleShape(anchor); 
    shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL); 
    ... 
} 

이 솔루션은 우아한 아니지만, 그냥 작동합니다하지만 문제를 해결하는 한 가지 방법은 실제 크기에 따라 모양 (특히 앵커)을 확장하는 것입니다.

+0

안녕하세요, 저는 다소 비슷한 문제가 있습니다. (또는 최소한 시도해보아야 할 것처럼 보입니다) 여기 제가 생각하기에 : http://stackoverflow.com/questions/28298947/npoi-images-created-in -foreach-loop-not-resizing-correctly - 그래서 "defaultcolumnwidth/height"가 "진짜"excel-defaultcolumnwidth/height인지 묻고 싶습니다. 안부 인사, 도미니크 – Dominik