我可以在excel单元格中输入Java格式的日期吗?
我有一个java程序,它使用ApachePOI3.17阅读和编辑xlsx工作簿。我想读一个日期,格式很重要。我需要原始日期,也就是制作工作簿的人输入的日期。我做了很多研究,发现日期在Excel中是以整数形式存储的,十进制数就是时间。例如,一个人输入“1/1/1947”,Excel将其内部存储为“17168”,然后在单元格中显示为“01-Jan-47”。我无法更改原始工作簿。有没有办法获得在java程序中使用apache poi时输入的原始“1/1/1947”?当我这样做的时候:
Cell cell = row.getCell(cellColumn, MissingCellPolicy.CREATE_NULL_AS_BLANK);
String value = dataFormatter.formatCellValue(cell);
该值显示为显示值“01-Jan-47”。当我这样做的时候:
Cell cell = row.getCell(cellColumn, MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setCellType(CellType.STRING);
String value = cell.getStringCellValue();
我得到了内部值“17168”。有人知道如何(或者如果可能的话)输入原始值吗?它肯定会存储在Excel工作簿中,因为它会在单击单元格时显示。或者,如果我在Eclipse中调试程序并单击上面显示的cell对象,日期以显示格式显示,但它有完整的4位年份;“1947年1月1日”。如果原始格式不可能,我也可以使用它,所以如果有人知道如何将其转换为字符串,它也会有所帮助。谢谢
# 1 楼答案
正如Axel Richter在评论中所解释的,原始格式从未被存储。我以为原始格式实际上是我操作系统的默认格式。我将使用Excel中的数字存储格式或单元格。getDateCellValue获取完整日期并重新格式化。谢谢大家的评论
# 2 楼答案
我记得我也试过
现在
formatPattern
可能有助于将其转换为java日期格式化程序。 (代码对一些标准值(API中有常数)和自定义值进行编号。) 当时我没有这样做,因为解决方案并不令人满意也许你会更成功,所以我提到了
# 3 楼答案
(跟进评论)
根据您包含的代码:
下面是一个函数示例,该函数可以返回一个经过处理的字符串值,以表示您正在寻找的目标:
返回: