Apache POI에서 열 너비 설정
XML을 MS Excel로 변환하기 위해 Apache POI API를 사용하여 Java로 도구를 작성하고 있습니다. 내 XML 입력에서 열 너비를 포인트로받습니다. 그러나 Apache POI API에는 글꼴 크기 등에 따라 열 너비를 설정하는 약간 이상한 논리가 있습니다 ( API 문서 참조 ).
Excel에서 예상 한대로 포인트를 너비로 변환하는 공식이 있습니까? 전에이 일을 한 사람이 있습니까?
setRowHeightInPoints()
그래도 방법 이 있습니다 :( 그러나 열에는 없습니다.
추신 : 입력 XML은 ExcelML 형식이므로 MS Excel로 변환해야합니다.
불행히도 함수 setColumnWidth (int columnIndex, int width) from class Sheet
; 너비가 표준 글꼴 (통합 문서의 첫 번째 글꼴) 의 문자 수인 경우 글꼴이 변경되면 사용할 수 없습니다. 글꼴 크기의 함수에서 너비를 계산하는 방법이 설명되어 있습니다. 공식은 다음과 같습니다.
width = Truncate([{NumOfVisibleChar} * {MaxDigitWidth} + {5PixelPadding}] / {MaxDigitWidth}*256) / 256
autoSizeColumn(int column, boolean useMergedCells)
에 데이터를 입력 한 후 언제든지 사용할 수 있습니다 Sheet
.
의 사용에주의하십시오 autoSizeColumn()
. 작은 파일에서도 문제없이 사용할 수 있지만 각 열에 대해 한 번만 (마지막에) 메서드가 호출되고 의미가없는 루프 내에서 호출되지 않도록주의하십시오.
autoSizeColumn()
큰 Excel 파일에는 사용하지 마십시오 . 이 메서드는 성능 문제를 생성합니다.
110k 행 / 11 열 파일에서 사용했습니다. 이 방법은 모든 열의 크기를 자동 조정하는 데 약 6m가 걸렸습니다.
자세한 내용은 apache POI에서 열 자동 크기 조정 속도를 높이는 방법을 참조하십시오 .
이 블로그에 언급 된 util 메서드도 사용할 수 있습니다 . Apache POI를 사용하여 Excel에서 셀 크기 및 높이 가져 오기 . 문제를 해결할 수 있습니다.
해당 블로그에서 복사하여 붙여 넣기 :
static public class PixelUtil {
public static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
public static final short EXCEL_ROW_HEIGHT_FACTOR = 20;
public static final int UNIT_OFFSET_LENGTH = 7;
public static final int[] UNIT_OFFSET_MAP = new int[] { 0, 36, 73, 109, 146, 182, 219 };
public static short pixel2WidthUnits(int pxs) {
short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR * (pxs / UNIT_OFFSET_LENGTH));
widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
return widthUnits;
}
public static int widthUnits2Pixel(short widthUnits) {
int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR) * UNIT_OFFSET_LENGTH;
int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
pixels += Math.floor((float) offsetWidthUnits / ((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
return pixels;
}
public static int heightUnits2Pixel(short heightUnits) {
int pixels = (heightUnits / EXCEL_ROW_HEIGHT_FACTOR);
int offsetWidthUnits = heightUnits % EXCEL_ROW_HEIGHT_FACTOR;
pixels += Math.floor((float) offsetWidthUnits / ((float) EXCEL_ROW_HEIGHT_FACTOR / UNIT_OFFSET_LENGTH));
return pixels;
}
}
따라서 셀 너비와 높이를 얻으려면 이것을 사용하여 픽셀 값을 얻을 수 있으며 값은 약 .
PixelUtil.heightUnits2Pixel((short) row.getHeight())
PixelUtil.widthUnits2Pixel((short) sh.getColumnWidth(columnIndex));
함께 스칼라 멋진 래퍼가 spoiwo은
다음과 같이 할 수 있습니다.
Workbook(mySheet.withColumns(
Column(autoSized = true),
Column(width = new Width(100, WidthUnit.Character)),
Column(width = new Width(100, WidthUnit.Character)))
)
다음과 같이 모든 열과 셀의 기본 너비로 문제에 답했습니다.
int width = 15; // Where width is number of caracters
sheet.setDefaultColumnWidth(width);
참조 URL : https://stackoverflow.com/questions/11573993/setting-column-width-in-apache-poi
'Development Tip' 카테고리의 다른 글
양식 제출 중지, Jquery 사용 (0) | 2021.01.10 |
---|---|
Linux에서 Windows로 scp (0) | 2021.01.10 |
IIS에서 ASP.NET MVC에 대해 HTTP PUT 및 DELETE를 활성화하려면 어떻게합니까? (0) | 2021.01.10 |
jade 템플릿간에 변수를 전달하는 방법 (0) | 2021.01.10 |
Node.js에서 CSV를 JSON으로 변환하는 방법 (0) | 2021.01.10 |