Apache POI에서 열 너비 설정
저는 Apache POI API를 사용하여 XML을 MS Excel로 변환하기 위한 툴을 자바에서 작성하고 있습니다.XML 입력으로 열 너비를 포인트로 받습니다.그러나 Apache POI API는 글꼴 크기 등을 기준으로 열 너비를 설정할 때 약간 이상한 논리를 가지고 있습니다(API 문서 참조).
Excel이 예상한 대로 점을 너비로 변환하는 공식이 있습니까?이런 거 해본 사람 있어?
이 있습니다.setRowHeightInPoints()
메서드(열에는 없음).
추신: 입력 XML은 ExcelML 형식으로 MS Excel로 변환해야 합니다.
안타깝게도 setColumnWidth(int column) 함수만 있습니다.인덱스(int width) 시작점class Sheet
; width는 표준 글꼴(워크북의 첫 번째 글꼴)의 숫자입니다. 글꼴이 변경되면 사용할 수 없습니다.글꼴 크기의 함수에서 너비를 계산하는 방법에 대해 설명합니다.공식은 다음과 같습니다.
width = Truncate([{NumOfVisibleChar} * {MaxDigitWidth} + {5PixelPadding}] / {MaxDigitWidth}*256) / 256
데이터 입력 후 언제든지 사용할 수 있습니다.Sheet
.
사용법에 주의해 주십시오.autoSizeColumn()
작은 파일에서도 문제없이 사용할 수 있지만, 각 컬럼에 대해 1회(마지막)만 호출하고 루프 내에서 호출하지 않도록 주의해 주십시오.
사용을 피하세요.autoSizeColumn()
큰 Excel 파일에 있습니다.메서드로 인해 성능 문제가 발생합니다.
110k 행/11 열 파일에 사용했습니다.이 방법에서는 모든 컬럼을 자동 사이징하는 데 약 600만 시간이 소요되었습니다.
자세한 내용은 Apache POI의 컬럼 크기를 자동화하는 방법을 참조하십시오.
이 블로그에 기재되어 있는 사용방법도 사용할 수 있습니다.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));
Scala와 함께 멋진 포장지가 있습니다.
다음과 같이 할 수 있습니다.
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
'programing' 카테고리의 다른 글
여러 파일의 내용을 하나의 파일에 추가하는 방법 (0) | 2023.04.11 |
---|---|
unix - 파일의 head 및 tail (0) | 2023.04.11 |
$.ajax(jQuery 또는 Zepto)를 사용하여 일련의 객체를 POST하려면 어떻게 해야 합니까? (0) | 2023.04.06 |
mongoDB 구별 및 같은 쿼리의 어디에 있습니까? (0) | 2023.04.06 |
TypeScript 사용자 지정 오류 클래스 (0) | 2023.04.06 |