java 使用Apache POI从Excel单元格获取原始日期值

oalqel3c  于 2022-12-17  发布在  Java
关注(0)|答案(1)|浏览(338)

我有一个日期为“30.08.2022”的excel,这个excel字段被格式化为日期。但是当我尝试获取原始值时,我只得到“44803”。无论我怎么尝试,我都得不到原始字符串。我只想得到直接字符串。我已经尝试过格式化程序。formatCellValue(单元格);但是我得到了一个格式化的字符串值8/30/22。但是我需要与单元格中相同的值

public class Main {
public static void main(String[] args) throws IOException {
    
    String excelName = "<path to exce>";
    String excelSheet = "<sheetname>";

    try (XSSFWorkbook workbook = new XSSFWorkbook(excelName)) {

        DataFormatter formatter = new DataFormatter();
        XSSFSheet sheet = workbook.getSheet(excelSheet);
        XSSFRow row1 = sheet.getRow(0);

        //Date
        XSSFCell cell1 = row1.getCell(0);
        System.out.println(cell1.getRawValue());//44803
        System.out.println( formatter.formatCellValue(cell1));//8/30/22

    }

}
}

mnowg1ta

mnowg1ta1#

here所示,值44803是自Excel纪元以来的正确天数。您可以使用单元格样式中的getDataFormatString()来获取Excel用于显示该值的格式字符串。下面的输出包括格式化的Date,后跟[原始数据:数据格式索引:和对应的格式字符串]:

Tue Aug 30 00:00:00 EDT 2022 [44803:59:m/d/yyyy]
if (DateUtil.isCellDateFormatted(cell)) {
    System.out.print(cell.getDateCellValue() + getFormat(cell));
}
…
private static String getFormat(Cell cell) {
    return " ["
        + ((XSSFCell) cell).getRawValue() + ":"
        + cell.getCellStyle().getDataFormat() + ":"
        + cell.getCellStyle().getDataFormatString() + "]";
}

相反,如果给定DataFormatter的示例,则可以使用指定的格式设置原始日期的格式,生成8/30/2022

var df = new DataFormatter();
System.out.println(df.formatRawCellContents(44803, 59, "m/d/yyyy"));

相关问题