Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 格式为日期的单元格中的日期不能识别为日期_Java_Excel_Date_Apache Poi - Fatal编程技术网

Java 格式为日期的单元格中的日期不能识别为日期

Java 格式为日期的单元格中的日期不能识别为日期,java,excel,date,apache-poi,Java,Excel,Date,Apache Poi,我试图使用Apache的JavaPOI将日期添加到电子表格中。但是,我的结果是,日期格式单元格中的日期不会被单元格识别为日期,而是字符串。然而,当我随后打开电子表格时,只需点击单元格即可——即在编辑它的同时,甚至没有进行有效的更改——并且日期格式会自动识别。我如何让我的程序在不需要我干预的情况下执行这最后一步?提前,非常感谢 CreationHelper creationHelper = wb.getCreationHelper(); XSSFCellStyle cellStyl

我试图使用Apache的JavaPOI将日期添加到电子表格中。但是,我的结果是,日期格式单元格中的日期不会被单元格识别为日期,而是字符串。然而,当我随后打开电子表格时,只需点击单元格即可——即在编辑它的同时,甚至没有进行有效的更改——并且日期格式会自动识别。我如何让我的程序在不需要我干预的情况下执行这最后一步?提前,非常感谢

    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++;
    }
到目前为止,有两种可能的方法来设置日期值。和。直到现在才支持使用
java.time.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) {
  }
 }
}

现在还为LocalDate和LocalDateTime定义了它

现在可以完美地工作了!关于当前文档的局限性,您完全正确。非常感谢你!我想我今天的教训是,总是追求最新的并不一定更好,尤其是当那些东西(还)没有得到支持的时候。此外,非常感谢您详细介绍的示例。祝你一天愉快!