programing

Excel용 Apache POI:전체 열에 대해 셀 유형을 "텍스트"로 설정

megabox 2023. 10. 11. 20:35
반응형

Excel용 Apache POI:전체 열에 대해 셀 유형을 "텍스트"로 설정

스프레드시트용 Java 라이브러리 Apache POI를 사용하여 .xls(Excel) 파일을 생성해야 합니다.

파일에는 열 A에 "0221..." 또는 "+49221..."로 형식이 지정된 전화 번호 목록이 포함됩니다. 따라서 Excel은 기본적으로 전화 번호를 숫자 셀로 해석합니다.선두 0 또는 +가 잘리기 때문에 좋지 않습니다.

그 문제를 해결하기 위해서, 나는 사용할 수 있습니다.cell.setCellType(Cell.CELL_TYPE_STRING), 잘 작동하지만 특정 세포에 대해서만 작동합니다

전체 열(즉, 사용자가 추가 전화 번호를 입력할 나머지 모든 셀에 대해서도)에 대해 이 설정을 적용하려면 어떻게 해야 합니까?

Excel에서는 다음과 같이 가능합니다.전체 컬럼 선택 후 셀 타입 적용 (설정은 파일 저장/로딩 후 유지)

하지만 POI에 대한 정확한 방법을 찾을 수가 없습니다.

  • 처음엔 내가 생각해봤는데, 그건 아마sheet.setDefaultCellType(int colNum). 하지만 저는 이런 것을 찾을 수가 없습니다. (아마도 저는 그냥 눈이 멀었을 것입니다?)도서관에는 "정렬중심" 등과 같은 텍스트 스타일을 적용하는 비슷한 방법이 많이 있습니다.)
  • 그러고는 이렇게 생각했습니다.아마 Named Range 같은 것에만 적용될 수 있을 겁니다. 하지만 이게 어떻게 작동하는지는 아직 못 알아냈어요.

블라드의 답변에서 영감을 받은 코드 예시는 다음과 같습니다.

DataFormat fmt = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
worksheet.setDefaultColumnStyle(0, textStyle);

위 코드는 워크시트의 첫 번째 열에 대한 기본 스타일을 TEXT로 설정합니다.

고마워요, 블라드!

이게 도움이 될까요?

@ 기호를 사용하여 데이터 형식을 만든 후 setDefaultColumnStyle() 메서드로 전달되는 CellStyle 개체에서 이 형식을 사용하여 열의 기본 데이터 형식을 텍스트로 설정할 수 있습니다.더 이상 실험하지는 않았지만 다른 스타일 개체와 비슷한 작업을 수행하여 기본 유형을 숫자로 설정하거나 통화와 같은 맞춤 형식으로 설정하는 것이 가능할지는 의문입니다.

POI를 사용하여 지금 설정하는 더 나은 방법은BuiltinFormats학급.

예:

열 유형을 숫자로 변환하는 방법

 CellStyle numericStyle = workbook.createCellStyle(); 
 numericStyle.setDataFormat(BuiltinFormats.getBuiltinFormat(2)); // 2 For Number 
 worksheet.setDefaultColumnStyle(colId, numericStyle);

의 전체 목록.BuiltinFormats형식을 볼 수 있습니다. 여기

블라드: 이것으로 대부분의 문제가 해결되었습니다.빈 행들이 모두 제가 원하는 대로 포맷되어 있는 것을 발견했습니다.그러나 초기 0이 있는 행은 잘 보이고 잘 작동했습니다. 그러나 0으로 시작하는 다른 값으로 기존 값을 변경해야 하면 0이 사라졌습니다.따라서 셀에 값을 생성할 때 코드를 추가하여 setCellStyle을 텍스트로 재설정하는 것을 추천합니다.다음은 메서드 공개 Cell createCell(Row!, BBjNumber cell, BBjString 값!)입니다.

c!=#this!.createCell(r!, cell)
c!.setCellValue(value!)
c!.setCellStyle(#text_format!)

메소드 레트!

#text_format! = #wb!.createCellStyle()
#text_format!.setDataFormat(#format!.getFormat("@"))

메소드 엔드

초기 0을 찾는 다른 단독 검색에 도움이 될 수 있습니다.글 올려주셔서 감사합니다. 알렉스.

언급URL : https://stackoverflow.com/questions/6510012/apache-poi-for-excel-setting-the-cell-type-to-text-for-an-entire-column

반응형