gpt4 book ai didi

java - 单元格中的日期格式为日期未识别为日期

转载 作者:行者123 更新时间:2023-11-30 06:09:09 26 4
gpt4 key购买 nike

我正在尝试使用 Apache 的 Java POI 将日期添加到电子表格中。但是,我最终以日期格式的单元格中的日期未被单元格识别为日期,而是识别为字符串。然而,当我随后打开电子表格时,只需要点击单元格——即编辑它,甚至没有做出有效的改变——日期格式就会被自动识别。我怎样才能让我的程序在不需要我干预的情况下执行最后一步?非常感谢,提前!

    CreationHelper creationHelper = wb.getCreationHelper();
XSSFCellStyle cellStyleDate = wb.createCellStyle();

LocalDate start = LocalDate.of(2000, 1, 1);
LocalDate end = LocalDate.of(2000, 12, 31);

cellStyleDate.setDataFormat(creationHelper.createDataFormat().getFormat("dd.mm.yyyy"));
int i = 1;
for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {

// wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date);
wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date.toString());
// wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date.getDayOfMonth() + "." + date.getMonthValue() + "." + date.getYear());

wb.getSheetAt(0).getRow(i).getCell(0).setCellStyle(cellStyleDate);
i++;
}

最佳答案

现在是 documented有两种可能的方法来设置日期值。 setCellValue(java.util.Calendar value)setCellValue(java.util.Date value) .直到现在才支持使用 java.time.LocalDate

所以你必须转换LocalDate在设置为单元格值之前进入 java.util.Date

例子:

import java.io.*;

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.Date;
import java.time.LocalDate;
import java.time.ZoneId;

import java.awt.Desktop;

class LocalDateTest {

public static void main(String[] args) {
try {

Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("Sheet1");

CreationHelper creationHelper = wb.getCreationHelper();
CellStyle cellStyleDate = wb.createCellStyle();

LocalDate start = LocalDate.of(2000, 1, 1);
LocalDate end = LocalDate.of(2000, 12, 31);

cellStyleDate.setDataFormat(creationHelper.createDataFormat().getFormat("dd.mm.yyyy"));
int i = 1;
for (LocalDate localdate = start; localdate.isBefore(end.plusDays(1)); localdate = localdate.plusDays(1)) {
Date date = Date.from(localdate.atStartOfDay(ZoneId.systemDefault()).toInstant());
wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date);
wb.getSheetAt(0).getRow(i).getCell(0).setCellStyle(cellStyleDate);
i++;
}

OutputStream out = new FileOutputStream("LocalDateTest.xlsx");
wb.write(out);
wb.close();

System.out.println("Done");
File outputfile = new File("LocalDateTest.xlsx");
Desktop.getDesktop().open(outputfile);


} catch (FileNotFoundException fnfex) {
} catch (IOException ioex) {
}
}
}

以上是Apache POI 2016版本,当前apache poi 5.2.2提供Cell.setCellValue(java.time.LocalDate value)以及Cell.setCellValue(java.time.LocalDateTime value) .

关于java - 单元格中的日期格式为日期未识别为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38492818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com