我已经使用Apache POI一段时间以编程方式读取现有的Excel 2003文件 . 现在我有了一个新的要求,即在内存中创建整个.xls文件(仍使用Apache POI),然后将它们写入文件末尾 . 我唯一的问题是处理带日期的细胞 .
请考虑以下代码:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
当我将包含此单元格的工作簿写入文件并使用Excel打开时,单元格显示为数字 . 是的,我确实知道Excel将其“日期”存储为自1900年1月1日以来的天数,这就是单元格中的数字所代表的数字 .
QUESTION: What API calls can I use in POI to tell it that I want a default date format applied to my date cell?
理想情况下,如果用户在Excel中手动打开电子表格并键入Excel认为是日期的单元格值,我希望电子表格单元格显示的Excel具有与Excel分配的相同的默认日期格式 .
6 回答
要设置为默认Excel类型日期(默认为操作系统级别区域设置/ - >例如,如果您在Excel的单元格格式选择器中选择它时,xlsx在德国或英国人打开时会显示不同/并且标有星号)您应该:
我用xlsx做了它,它工作得很好 .
http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells
此示例适用于.xlsx文件类型 . 此示例来自用于创建.xslx电子表格的.jsp页面 .
我在这里写我的答案,因为它可能对其他读者有帮助,他们的要求可能与提问者的要求略有不同 .
我准备一个.xlsx模板;所有将填充日期的单元格已经格式化为日期单元格(使用Excel) .
我使用Apache POI打开.xlsx模板,然后将日期写入单元格,它可以工作 .
在下面的示例中,单元格A1已在Excel中格式化为
[$-409]mmm yyyy
格式,Java代码仅用于填充单元格 .打开Excel时,日期格式正确 .
此代码示例可用于更改日期格式 . 在这里,我想从yyyy-MM-dd改为dd-MM-yyyy . 这里
pos
是列的位置 .要知道Excel使用的格式字符串而不必猜测它:创建一个excel文件,在单元格A1中写入日期并根据需要对其进行格式化 . 然后运行以下行:
然后复制粘贴生成的字符串,删除反斜杠(例如
d/m/yy\ h\.mm;@
变为d/m/yy h.mm;@
)并在http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells代码中使用它: