programing

POI HSSF API를 사용하여 Excel 셀에서 날짜 값 읽기

testmans 2023. 4. 15. 08:29
반응형

POI HSSF API를 사용하여 Excel 셀에서 날짜 값 읽기

자바에서의 엑셀 조작에 POI HSSF API를 사용하고 있습니다.Excel 셀 중 하나에 날짜 값 "8/1/2009"가 있는데, HSSF API를 사용하여 이 값을 읽으려고 하면 셀 유형이 수치로 검색되어 날짜의 "Double" 값이 반환됩니다.아래의 샘플 코드를 참조해 주세요.

cell = row.getCell(); // date in the cell '8/1/2009'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    cellValue = new Double(cell.getNumericCellValue()).toString();
    break;
default:
}

Cell.getCellType()은 NUMERIC_TYPE을 반환하므로 이 코드는 날짜를 더블로 변환합니다. : (

HSSF POI에서 날짜를 그대로 읽을 수 있는 방법은 없나요?

다음 항목을 살펴보십시오.

HSSFDateUtil.isCellDateFormatted()

HSSFDateUtil에 대한 자세한 내용은 POI 끔찍한 스프레드시트 포맷 API를 참조하십시오.

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html

또한 Excel을 반환하기 위한 몇 가지 도우미 방법도 제공합니다.getExcelDate()및 Java 날짜getJavaDate()날짜 형식이 다를 수 있으므로 주의해야 합니다만...

Excel 파일과 같은 형식으로 날짜를 참조하려면 CellDateFormatter를 사용해야 합니다.샘플 코드:

CellValue cValue = formulaEv.evaluate(cell);
double dv = cValue.getNumberValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
    Date date = HSSFDateUtil.getJavaDate(dv);

    String dateFmt = cell.getCellStyle().getDataFormatString();
    /* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as 
    Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java 
    will always be 00 for date since "m" is minutes of the hour.*/

    strValue = new CellDateFormatter(dateFmt).format(date); 
    // takes care of idiosyncrasies of Excel
}

Excel은 날짜와 시간을 숫자로 취급합니다.존이 더 잘 말했으니까, 여기서 따라하지 않을게.

단, 질문 내용에 대한 샘플코드는 http://poi.apache.org/spreadsheet/quick-guide.html#CellContents에 있습니다.

POI 3.5를 사용하는 경우 다음을 사용할 수 있습니다.

cell.getDateCellValue() 메서드.이는 Excel 2007에서도 유효합니다.

POI 3.15 베타3 이후 일부 기능은deprecated. 데이터 형식을 확인하고 Java로 검색할 수 있습니다.Date.

SimpleDateFormat format = new SimpleDateFormat("");
String cellValue;
if(cell != null && cell.getCellTypeEnum() != CellType.STRING &&
    cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){

    cellValue = format.format(cell.getDateCellValue());
}

언급URL : https://stackoverflow.com/questions/861877/reading-date-values-from-excel-cell-using-poi-hssf-api

반응형