我有一个使用 apache-poi 3.17 读取和编辑 xlsx 工作簿的 java 程序。我正在尝试读取日期,格式很重要。我需要制作工作簿的人输入的原始日期。我研究了很多,发现日期在 Excel 中存储为整数,十进制数字是时间。例如,一个人输入“1/1/1947”,Excel 将其在内部存储为“17168”,然后在单元格中显示为“01-Jan-47”。我无法更改原始工作簿。有没有办法获得在 java 程序中使用 apache poi 时输入的原始“1947 年 1 月 1 日”?当我做: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 中调试程序并单击上面显示的单元格对象,日期以显示格式显示,但它具有完整的 4 位数年份; “1947 年 1 月 1 日”。如果原始格式不可能,我也可以使用它,所以如果有人知道如何将它转换为字符串,它也会有所帮助。谢谢。
最佳答案
(跟进评论)
基于此代码,您包括:
Cell cell = row.getCell(cellColumn, MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setCellType(CellType.STRING);
String value = cell.getStringCellValue();
下面是一个函数示例,它可以返回一个经过处理的 String 值来表示您正在寻找的目标:
private static String returnOrig(String value) {
String mth;
String[] parts = value.split("-");
String day = parts[0];
if (day.substring(0,1).equals("0")) {
day = day.substring(1,2);
}
switch(parts[1]) {
case "Jan": mth = "1"; break;
case "Feb": mth = "2"; break;
case "Mar": mth = "3"; break;
case "Apr": mth = "4"; break;
case "May": mth = "5"; break;
case "Jun": mth = "6"; break;
case "Jul": mth = "7"; break;
case "Aug": mth = "8"; break;
case "Sep": mth = "9"; break;
case "Oct": mth = "10"; break;
case "Nov": mth = "11"; break;
case "Dec": mth = "12"; break;
default: mth = "0";
}
String original = mth + "/" + day + "/" + parts[2];
return original;
}
返回:
"1/1/47"
关于java - 我可以将 Java 中的日期作为 TYPED INTO excel 单元格获取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54095340/