gpt4 book ai didi

java - 以双格式获取日期 43318.4847916667 而不是 06-08-2018 11 :38:06

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

我正在编写 java 代码以使用 HSSFWorkbook(.xls) 生成 excel 文件。我需要以 06-08-2018 11:38:06 这种格式在一列中写日期,但它生成的是这样的 43318.4847916667。
这是我使用的代码片段。请帮助我如何才能成功编写

Workbook workbook = new HSSFWorkbook();
Sheet excelSheet = workbook.createSheet();
Row dataRow = excelSheet.createRow(1);;
Cell dataCell = dataRow.createCell(1);;
CellStyle cStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
dataCell.setCellValue(new Date());
dataCell.setCellStyle(cStyle);

最佳答案

无法重现问题。

下面的完整示例生成一个 Excel 工作簿,该工作簿在 B2 单元格中有一个工作表和一个正确格式化的日期。

代码:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

class CreateExcelDate {

public static void main(String[] args) throws Exception {

try (Workbook workbook = new HSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("./Excel.xls") ) {

CellStyle cStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));

Sheet excelSheet = workbook.createSheet();
Row dataRow = excelSheet.createRow(1);;
Cell dataCell = dataRow.createCell(1);;
dataCell.setCellValue(new java.util.Date());
dataCell.setCellStyle(cStyle);

excelSheet.setColumnWidth(1, 25 * 256);

workbook.write(fileout);
}

}
}

结果:

enter image description here


从您的评论来看,您的问题并未显示全部。行有一个循环,每一行都应创建一个日期。这只适用于第 42 行。

嗯,这个问题是众所周知的。 Excel 对每个工作簿的单元格样式数有限制。请参阅:Excel specifications and limits .

因此,如果您在循环中反复创建新的单元格样式,有时会达到该限制。但是,您不必总是在循环中创建新的单元格样式。单元格样式存储在工作簿级别。只需在循环外创建任何需要的单元格样式。然后仅将先前创建的单元格样式应用于循环内的单元格。

以下对我有用并创建 1000 个正确格式化的日期:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

class CreateExcelDate {

public static void main(String[] args) throws Exception {

try (Workbook workbook = new HSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("./Excel.xls") ) {

CellStyle cStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));

Sheet excelSheet = workbook.createSheet();

for (int r = 1; r < 1000; r++) {
Row dataRow = excelSheet.createRow(r);;
Cell dataCell = dataRow.createCell(1);;
dataCell.setCellValue(new java.util.GregorianCalendar(2019, 9, r));
dataCell.setCellStyle(cStyle);
}

excelSheet.setColumnWidth(1, 25 * 256);

workbook.write(fileout);
}

}
}

关于java - 以双格式获取日期 43318.4847916667 而不是 06-08-2018 11 :38:06,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58540275/

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