【发布时间】:2012-03-14 22:09:22
【问题描述】:
背景:
我需要导出一个电子表格文档,其中一列包含日期格式的数据。
我目前正在像这样设置工作簿样式:
...
dateTimeStyle = workbook.createCellStyle();
//dateTimeStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
dateTimeStyle.setDataFormat((short)0x16);
...
并将数据插入单元格/设置单元格的格式,如下所示:
...
if (Date.class.isAssignableFrom(o.getClass())) {
Calendar cal = Calendar.getInstance();
cal.setTime((Date) o);
cell.setCellStyle(dateTimeStyle);
cell.setCellValue(cal);
}
...
注意:根据 BuiltinFormats 文档 (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html) 0x16 是指我想要实现的日期格式。
我遇到的问题是,当我在 Microsoft Office Excel 2007 中打开导出的文档时,当我右键单击单元格并选择 格式化单元格... 时,它会将所选单元格显示为具有dd/mm/yyyy hh:mm的自定义格式
此外,VLOOKUP 操作在列上不起作用(我承认,我可能做错了):
我感觉这是由于对 Excel 如何存储和格式化内容的方式存在误解,希望能提供任何帮助。
问题:
那么,我如何正确格式化/填充单元格,以便 Microsoft Excel 将其视为日期并且 VLOOKUP 工作等?
更新:如果我在 Open Office Calc 中打开生成的文件并选择“设置单元格格式...”,格式会正确显示为日期。那么,开始怀疑这是否是 POI 库和 Excel 2007 的问题...
非常感谢。
【问题讨论】:
-
为了使您的 vlookup 工作,单元格需要包含 00:00 的时间,您可以通过向下舍入日期 (=ROUNDDOWN(CELL,0)) 来做到这一点。将它们的格式(在 Excel 中)更改为 dd-mm-yy 不会改变它们的值(即时间将被隐藏但仍然存在),不确定 POI。
-
那么有没有办法在日期时间做 VLOOKUP?另外,如果我用该列上的单元格引用替换 VLOOKUP 的第一个参数,它仍然不匹配?
-
有。但是 VLOOKUP 将寻找完全匹配(如果最后一个参数设置为 false)并且您的参数“2012/01/31”不等于“31/01/2012 14:34”,因此您需要调整其中一个.如果 VLOOKUP 的最后一个参数为真,那么它将寻找最接近的匹配项,这可能是您需要的,也可能不是。
-
感谢您的帮助!我觉得这是 VLOOKUP 的冰山一角!问题是,当我这样做时: =VLOOKUP("31/01/2012 14:34", A2:G20, 7, FALSE) 最后带有 FALSE 或 TRUE 我得到 #N/A 错误。那是因为它正在寻找的值必须与单元格格式匹配吗?为什么这不起作用?
-
您可以例如使用 =VLOOKUP(DATE(2012,1,31)+TIME(14,34,0),A2:G20,7,FALSE) (假设秒为 0)或 = VLOOKUP(H1,xxxx) 假设 H1 包含您要查找的日期+时间
标签: java excel apache-poi