response.setContentType("application/vnd.ms-excel;charset=utf-8"); String fileName = URLEncoder.encode(startTime+"至"+endTime+"质量事故数据表", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), User.class) .autoCloseStream(Boolean.FALSE) .sheet("质量事故数据表") .doWrite(listAll);
时间: 2024-04-11 18:29:27 浏览: 217
这段代码用于在Java Web应用中生成并下载Excel文件。
首先,通过`response.setContentType("application/vnd.ms-excel;charset=utf-8")`设置响应的Content-Type为Excel文件类型。
接下来,创建一个文件名`fileName`,该文件名由`startTime`、`endTime`和固定的文本组成。使用`URLEncoder.encode()`对文件名进行编码,并使用`.replaceAll("\\+", "%20")`将编码后的空格替换为"%20"。
然后,通过`response.setHeader()`设置响应头部的Content-Disposition,指定文件的下载方式和文件名。其中,`filename*=utf-8''`用于指定编码格式为UTF-8,`+`符号被替换为"%20"。
接着,使用EasyExcel库来生成Excel文件。`.write(response.getOutputStream(), User.class)`指定将Excel文件写入到响应的输出流中,并且指定数据的类型为`User.class`。`.autoCloseStream(Boolean.FALSE)`表示不自动关闭输出流。
然后,使用`.sheet("质量事故数据表")`指定生成的Excel文件中的Sheet名称为"质量事故数据表"。
最后,使用`.doWrite(listAll)`将数据集合`listAll`写入到Excel文件中,并将该Excel文件通过响应流发送给客户端进行下载。
相关问题
response.setContentType("application/vnd.ms-excel;charset=UTF-8")和response.setContentType("application/octet-stream;charset=UTF-8");的区别);
`response.setContentType("application/vnd.ms-excel;charset=UTF-8")` 设置响应的内容类型为 MS Excel 格式,可用于导出 Excel 文件。具体来说,它会告诉浏览器响应的内容是 Excel 类型,浏览器会根据内容类型选择相应的处理程序来处理这个响应。
`response.setContentType("application/octet-stream;charset=UTF-8")` 设置响应的内容类型为二进制流,通常用于下载文件。具体来说,它会告诉浏览器响应的内容是二进制流类型,浏览器会将响应保存为文件而不是在浏览器中显示。
综上所述,两者的主要区别在于设置的响应类型不同,前者适用于导出 Excel 文件,后者适用于下载二进制文件。
WriteSheet sheet = EasyExcel.writerSheet().build(); // 简单导出 try { response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(pathName)); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); EasyExcel.write(response.getOutputStream(), class1).build().write(list, sheet).finish(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }导出的日期,没有按照指定的格式写入
在 EasyExcel 中,日期类型默认会按照 Excel 的日期格式写入,如果需要按照指定格式写入,可以通过使用 `@DateTimeFormat` 注解来实现。例如,如果你想将日期格式化为"yyyy-MM-dd",可以在实体类的日期字段上添加注解:
```
@DateTimeFormat("yyyy-MM-dd")
private Date date;
```
如果你已经添加了注解但导出的日期仍未按照指定格式写入,可以检查一下是否在写入 Excel 时使用了默认的日期格式化器。可以通过重写 `com.alibaba.excel.write.handler.WriteHandler.afterSheetCreate()` 方法来实现自定义日期格式化器,例如:
```
EasyExcel.write(response.getOutputStream(), class1)
.registerWriteHandler(new CellWriteHandler() {
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
// 自定义日期格式化器
writeSheetHolder.getSheet().setDefaultColumnStyle(0, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(1, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(2, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(3, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(4, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(5, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(6, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(7, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(8, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(9, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(10, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(11, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(12, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(13, null);
writeSheetHolder.getSheet().setDefaultColumnStyle(14, null);
CellStyle cellStyle = writeWorkbookHolder.getOrCreateCellStyle(writeWorkbookHolder.getOrCreateFont());
cellStyle.setDataFormat(writeWorkbookHolder.createDataFormat().getFormat("yyyy-MM-dd"));
writeSheetHolder.getSheet().setDefaultColumnStyle(0, cellStyle);
}
})
.build()
.write(list, sheet)
.finish();
```
可以通过 `setDefaultColumnStyle()` 方法设置日期格式化器。在上面的例子中,我们使用 `setDataFormat()` 方法将日期格式设置为"yyyy-MM-dd"。
阅读全文