使用poi完成excel文件导出以及网页中点击导出,自动下载excel文件
从后端操作,调用接口就可以完成excel文件自动下载。
一、创建一个demo
这里用了list模拟数据,实际业务看需求
public static void main(String[] args) throws Exception {
List list = new ArrayList();
list.add("标题a");
list.add("附件名b");
list.add("年度c");
list.add("发布人d");
list.add("发布日期d");
//标题,一共6个
String[] cloName = {"序号", "标题", "附件名", "年度", "发布人", "发布日期"};
//创建一个工作簿
XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
//创建sheet页,并且指定名字
XSSFSheet sheet = xssfWorkbook.createSheet("部门会议纪要列表");
//标头行
XSSFRow header = sheet.createRow(0);
//遍历数据,写入标题
for (int i = 0; i < cloName.length; i++) {
XSSFCell cell = header.createCell(i);
cell.setCellValue(cloName[i]);
}
//数据写入,这里使用的简单i++方式作为序号自增
int i = 1;
for (Object s : list) {
//创建行,从最后一行再加一行开始创建
XSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1);
//序号
row.createCell(0).setCellValue(i);
i++;
//标题
row.createCell(1).setCellValue(s.toString());
//附件名
row.createCell(2).setCellValue(s.toString());
//年度
row.createCell(3).setCellValue(s.toString());
//发布人
row.createCell(4).setCellValue(s.toString());
//发布日期,指定格式
String time = new SimpleDateFormat("yyyy-MM-dd").format(new Data());
row.createCell(5).setCellValue(time);
}
//excel文件名
String fileName = "部门会议纪要列表 导出表.xls";
//输出文件流
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
//写入
xssfWorkbook.write(fileOutputStream);
//关闭流
fileOutputStream.close();
xssfWorkbook.close();
}
二、使用网页,需要response响应下载
方法中需要有HttpServletResponse response参数作为本次响应;
与上面一致,就是将文件输出流改为response的输出流
try (OutputStream os = response.getOutputStream();) {
fileName = new String(fileName.getBytes(), "ISO8859-1");
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
xssfWorkbook.write(os);
os.flush();
xssfWorkbook.close();
} catch (Exception e) {
e.printStackTrace();
}
结果
会在本地根路径下生成对应的excel文件。
打开后显示内容:
到此,结束使用poi操作,完成excel的写出。