可是导出到Excel变成了如下图的数字
通过查看poi的api 的注释发现,setCellValue如果传递的是日期的类型, 那么会把日期变为数字, 你需要在打开Excel的软件中,把日期的这一列设置单元格格式为日期的格式. 这是其中的一种解决方案.
作为Java开发工程师, 肯定要用写代码的方式来解决问题, 解决方案就是把日期类型,格式化为字符串的类型即可. 再把字符串的类型传递到setCellValue里面去.
yyyy-MM-dd 和yyyy-MM-dd HH:mm:ss的两种格式,均可以格式化为yyyy-MM-dd的形式
for (User user: listUser) {
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
dataRow.createCell(0).setCellValue(user.getRealName());
dataRow.createCell(1).setCellValue(user.getId());
// 日期格式转为字符串输出
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String time= sdf.format(user.getTime());
dataRow.createCell(2).setCellValue(time);
String endTIme= sdf.format(user.getEndTime());
dataRow.createCell(3).setCellValue(endTIme);
之后导出的效果如下
------------------------------------------------------------------------------
20200422更新
根据下面的大神 lixumolin 的留言的地址
https://www.concretepage.com/apache-api/how-to-create-date-cell-in-xlsx-using-poi-in-java
导出时设置日期的方法可以修改为如下
public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("导出demo");
//设置默认的列宽为10个字符
sheet.setDefaultColumnWidth(10);
//设置单元格格式为日期类型
CellStyle cellStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
short dateFormat = createHelper.createDataFormat().getFormat("yyyy-MM-dd");
cellStyle.setDataFormat(dateFormat);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
//此处添加数据
HSSFRow headerRow1 = sheet.createRow(0);
headerRow1.createCell(0).setCellValue("序号");
headerRow1.createCell(1).setCellValue("批准日期");
HSSFRow headerRow2 = sheet.createRow(1);
headerRow2.createCell(0).setCellValue("1");
HSSFCell date2Cell = headerRow2.createCell(1);
date2Cell.setCellValue(new Date());
date2Cell.setCellStyle(cellStyle);
//清空response
response.reset();
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition",
"attachment; filename=" + new String("导出demo".getBytes(), "iso8859-1") + ".xls");
OutputStream os = new BufferedOutputStream(response.getOutputStream());
workbook.write(os);
os.flush();
os.close();
workbook.close();
导出的效果如下,为日期的格式, 并且自动的右对齐了
但此方法导出的问题是,点击单元格后, 会出现时分秒. 虽然在代码中设置的是"yyyy-MM-dd"年月日的格式,但是仍旧出现了时分秒.
希望能够有大佬能够解决此问题.
开发环境: POI版本: 3.17 jdk 1.8在用poi导出Excel的时候,数据库字段里面存储的是如下图的yyyy-MM-dd 和yyyy-MM-dd HH:mm:ss的格式可是导出到Excel变成了如下图的数字通过查看poi的api 的注释发现,setCellValue如果传递的是日期的类型, 那么会把日期变为数字, 你需要在打开Ex...