接口导出Excel的时候,Excel的格式有时候很复杂,包含图片,字体居中等等格式,当然通过poi的合并单元格那些操作也能实现,但比较复杂。比如这种Excel(仅仅是测试数据):
这里可以直接把模板通过文件的输出流直接输出出来,然后在Excel里的单元格填写查询的数据,这样就简单多了。具体操作如下:
1. 查询出单元格要写入的数据
2. 获取Excel模板
Workbook workbook = null;
Sheet sheet = null;
ClassPathResource resource = new ClassPathResource("excel/analysis.xlsx");
try {
InputStream inputStream = resource.getInputStream();
workbook = WorkbookFactory.create(inputStream);
sheet = workbook.getSheetAt(0);
workbook.setSheetName(0,"sheet页名称");
} catch (Exception e) {
e.printStackTrace();
}
可以直接把未填写数据的Excel模板放在代码的resource目录下,然后读取
3.给固定位置的Excel单元格写入数据
sheet.getRow(1).getCell(1).setCellValue("单元格值");
ps: Excel的行和列都是从0开始计算
4.输出Excel
try {
String disposition = String.format("attachment;filename=\"%s-%s.xlsx\"", sdf.format(new Date()), eventNum);
response.setContentType("application/msexcel");
response.setCharacterEncoding("utf-8");
response.addHeader("Content-Disposition", disposition);
workbook.write(response.getOutputStream());
} catch (Exception e) {
LOGGER.error(e.getMessage());
} finally {
try {
workbook.close();
} catch (IOException e) {
LOGGER.error(e.getMessage());
}
}
以上,就可以完成复杂Excel的导出了,是不是比在POI里合并单元格,去画一个Excel简单些呢