bestsource

셀 형식을 텍스트로 설정하는 방법

bestsource 2023. 6. 8. 21:14
반응형

셀 형식을 텍스트로 설정하는 방법

Apache-POI 3.14를 사용합니다.셀을 "텍스트" 형식으로 잠가야 합니다.내 셀의 데이터는 모두 숫자일 수 있지만 여전히 문자열로 간주됩니다.셀을 작성할 때는 다음과 같이 합니다.

cell.setCellValue("001");
cell.setCellType(Cell.CELL_TYPE_STRING);

Excel에서 출력 워크북을 열면 셀에 올바른 값("001")이 포함되어 있고 모서리에 작은 녹색 삼각형이 표시됩니다.느낌표 위에 마우스를 놓으면 마우스 커서 텍스트가 표시됩니다.The number in this cell is formatted as text or preceded by an apostrophe셀 형식(오른쪽 클릭 -> 셀 형식)을 보면 "카테고리"가 "일반"으로 표시됩니다.저는 이것이 "텍스트"일 것이라고 예상했습니다.

사용자가 숫자만 입력하여 셀의 값을 수정할 때 문제가 발생합니다.범주가 "일반"이므로 값이 입력되고 숫자로 표시되므로 선행 0과 오른쪽 맞춤이 제거됩니다.

Excel의 "포맷 셀" 대화 상자와 동일한 결과를 얻으려면 어떻게 해야 합니까?

다음을 통해 셀 형식을 텍스트로 설정할 수 있습니다.

DataFormat fmt = wb.createDataFormat();
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
    fmt.getFormat("@"));
cell.setCellStyle(cellStyle);

참고: 모든 해당 셀에 대해 CellStyle을 다시 사용해야 합니다. 모든 셀에 대해 새 셀을 만들지 마십시오.

또한 "오류 무시" 기능을 .xlsx 형식으로 사용하려고 시도할 수도 있지만 이 기능에 대한 지원이 아직 완전히 완료되지 않았습니다. 진행 중인 토론은 46136호와 58641호참조하십시오.

자세한 내용은 이 MSDN 페이지를 참조하십시오.

HSSF의 경우,

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

전체 열 스타일을 텍스트로 설정하고 범주를 텍스트로 설정합니다.

그러나 XSSF 형식을 사용하는 경우에는 작동하지 않습니다(Apache Poi 3.15를 사용하고 있으며 작동하지 않습니다).이 경우 다음을 사용하여 위의 코드 외에 텍스트로 처리할 각 셀에 스타일을 설정했습니다.

cell.setCellStyle(textStyle);

오류와 관련하여 다음을 사용할 수 있습니다.

sheet.addIgnoredErrors(new CellRangeAddress(0,9999,0,9999),IgnoredErrorType.NUMBER_STORED_AS_TEXT );

0행부터 9999까지의 행과 0열부터 9999까지의 행에 대한 NUMBER_STORED_AS_TEXT 오류를 무시하고 표시되지 않습니다.

OP가 아파치 솔루션을 요청한 것 같습니다.검색한 결과 다음과 같은 답을 발견했습니다.

HSSFCellStyle style = book.createCellStyle();
style.setDataFormat(BuiltInFormats.getBuiltInFormat("text"));

이 경우, Apache-POI 3.15를 사용하고 있는데 동일한 문제가 있어서 제 스타일로 데이터를 검증했습니다. 숫자 >0과 문자열이 필요합니다.

try {
    if (Integer.parseInt(field + "") >= 0) {
        int valor = Integer.parseInt(field + "");
        cell.setCellValue(valor); //Int
    }
} catch (NumberFormatException nfe) {
    // no int
    try {
        if (Double.parseDouble(field + "") >= 0) {
            double valor = Double.parseDouble(field + ""); //double
            cell.setCellValue(valor);
        }
    } catch (NumberFormatException nfe2) {
        cell.setCellValue(field + ""); //String
    }
}

Apache POI 4.0.1의 경우:

XSSFSheet sheet = workbook.createSheet("MySheetName");
sheet.addIgnoredErrors(new CellRangeAddress(0, 9999, 0, 9999), IgnoredErrorType.NUMBER_STORED_AS_TEXT);

org.apache.poi.xssf.user 모델에 시트를 캐스팅하도록 주의하십시오.XSSF시트org.apache.poi.ss.usermodel이 아닙니다.시트, 그렇지 않으면 메서드 addIgnoredErrors를 알 수 없습니다.

언급URL : https://stackoverflow.com/questions/36018660/how-to-set-a-cell-format-to-text

반응형