Programing

Apache POI Excel-확장 할 열을 구성하는 방법은 무엇입니까?

crosscheck 2020. 9. 11. 07:29
반응형

Apache POI Excel-확장 할 열을 구성하는 방법은 무엇입니까?


일부 데이터를 출력 Apache POI API하기 위해 생성하는 excel spreadsheet사용 하고 있습니다.

내가 직면 한 문제는 스프레드 시트를 만들고 열 때 열이 확장되지 않아 날짜 형식 텍스트와 같은 일부 긴 텍스트가 한 눈에 표시되지 않는다는 것입니다.

Excel에서 열 테두리를 두 번 클릭하여 확장하거나 테두리를 끌어 열 너비를 조정할 수 있지만 20 개 이상의 열이있을 수 있으며 스프레드 시트를 열 때마다 수동으로 수행 할 방법이 없습니다.

나는 (잘못 방법이 될 수 있지만) 발견 groupRow()setColumnGroupCollapsed()트릭하지만 행운을 할 수 있습니다. 아마도 나는 그것을 잘못된 방식으로 사용하고있을 것입니다.

샘플 코드 스 니펫

        Workbook wb = new HSSFWorkbook();
        CreationHelper createHelper = wb.getCreationHelper();
        //create sheet
        Sheet sheet = wb.createSheet("masatoSheet");

        //not really working yet.... :(
        //set group for expand/collapse
        //sheet.groupRow(0, 10); //just random fromRow toRow argument values...
        //sheet.setColumnGroupCollapsed(0, true);

        //create row
        Row row = sheet.createRow((short)0);
        //put a cell in the row and store long text data
        row.createCell(0).setCellValue("Loooooooong text not to show up first");

이 스프레드 시트가 생성 될 때 "Loooooooo 텍스트가 먼저 표시되지 않음"문자열이 셀에 있지만 열이 확장되지 않았으므로 "Loooooooo"만 표시됩니다.

스프레드 시트를 열 때 열이 이미 확장되도록 구성하려면 어떻게해야합니까 ???


모든 데이터를 시트에 추가 한 후autoSizeColumn(int column) 시트를 호출 하여 열을 적절한 크기에 자동으로 맞출 수 있습니다.

다음은 API에 대한 링크 입니다.

자세한 내용은이 게시물을 참조하십시오. apache poi를 사용할 때 엑셀 셀 크기를 콘텐츠 크기에 맞추는 문제


팁 : 자동 크기를 작동하려면 데이터를 Excel에 채운 후를 호출 sheet.autoSizeColumn(columnNumber)해야합니다 .

데이터를 채우기 전에 메서드를 호출해도 효과가 없습니다.


통합 문서의 모든 열 크기를 자동으로 조정하려는 경우 유용한 방법은 다음과 같습니다.

public void autoSizeColumns(Workbook workbook) {
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
        Sheet sheet = workbook.getSheetAt(i);
        if (sheet.getPhysicalNumberOfRows() > 0) {
            Row row = sheet.getRow(sheet.getFirstRowNum());
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}

다음과 같이 시도 할 수 있습니다.

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);

여기 매개 변수는 다음과 같습니다. 시트의 열 번호와 너비 그러나 너비 단위는 매우 작습니다. 예를 들어 4000을 시도해 볼 수 있습니다.


Excel POI의 경우 :

sheetName.autoSizeColumn(cellnum); 

아래 샘플 코드

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);

cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");

// 중요하다

sheet.autoSizeColumn(0);

// 인수는 셀 번호 여야합니다.

cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");

출력을 확인하고 미치광이 :)


열 수를 알고있는 경우 (컬렉션 목록과 동일 함). 이 하나의 라이너를 사용하여 한 시트의 모든 열을 조정할 수 있습니다 (최소 Java 8을 사용하는 경우).

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));

매우 간단합니다.이 한 줄 코드를 사용하십시오. dataSheet.autoSizeColumn (0)

또는 괄호 안의 열 수를 제공하십시오 .dataSheet.autoSizeColumn (cell number)


텍스트를 줄 바꿈 할 수도 있습니다. PFB 샘플 코드 :

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);

setColumnWidth()셀을 더 확장하고 싶다면 사용할 수 있습니다 .

참고URL : https://stackoverflow.com/questions/4611018/apache-poi-excel-how-to-configure-columns-to-be-expanded

반응형