POI导出到Excel文档
2020-02-12 本文已影响0人
yunqing_71
String fileName = ExcelUtil
.encodeFilename( "questionManage" + CommonUtils.dateFormat(new Date(), "yyyyMMdd") + ".xlsx", request);
response.setContentType("application/octet-stream;charset=iso-8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 客户端不缓存
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
1.设置导出的建议文件名
String fileName = '导出的Excel文档.xlsx';
2.在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
//这里设置成二进制流数据(如常见的文件下载)
response.setContentType("application/octet-stream;charset=iso-8859-1");
//Content-Disposition参数是为了在客户端另存文件时提供一个建议的文件名
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
//为了指示浏览器(客户端)不要缓存页面,通常下面两行合用
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
3.加载类路径下Excel模板文件
ClassPathResource classPathResource = new ClassPathResource("templates/myExcel.xlsx");
4.定义Excel文档对象
//获取文件输入流
InputStream fis = null;
//获取Excel文档对象
Workbook wb = null;
//获取Execl的sheet页
Sheet sheet = null;
//行
Row row;
//列
Cell cell;
//获取文件输入流
fis = classPathResource.getInputStream();
//根据输入流创建表格文件
wb = WorkbookFactory.create(fis);
//获取report的sheet页
sheet = wb.getSheet("report");
5.填充数据
// 获取首行,设置标题
titleRow = sheet.getRow(0);
// 获取第一行第一列的表格
cell = titleRow .getCell(0);
//给第一行第一列填充信息
cell.setCellValue(cell.getStringCellValue() + projInfo.getProjName());
// 获取第二行
row = sheet.getRow(1);
//第二行第九列的表格
cell = row.getCell(8);
//第二行第九列的表格填充信息
cell.setCellValue(reportVo.getReporterName());
//第二行地十三列表格填充信息
cell = row.getCell(12);
cell.setCellValue(startDate + "至" + endDate);
6.写出文件
//重设sheet页名字
wb.setSheetName(1, startDate + "至" + endDate);
//写出execl文档到response
wb.write(response.getOutputStream());
//关闭输出流
response.getOutputStream().flush();
response.getOutputStream().close();
7.设置边线框和自动换行
// 设置加边框线
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
// 自动换行
cellStyle.setWrapText(true);
//记得在每一行的每一列设置样式
cell.setCellStyle(cellStyle);
8.如果模板有想要填充的行和列则获取get
ClassPathResource classPathResource = new ClassPathResource("templates/exportfile/question.xlsx");
fis = classPathResource.getInputStream();
//根据输入流创建表格文件
wb = WorkbookFactory.create(fis);
//获取第一个sheet页
sheet = wb.getSheetAt(0);
//获取第一行
row = sheet.getRow(0);
//获取第一列
cell = row.getCell(0);
9.如果模板没有要填充的行和列则创建create
ClassPathResource classPathResource = new ClassPathResource("templates/exportfile/question.xlsx");
fis = classPathResource.getInputStream();
//根据输入流创建表格文件
wb = WorkbookFactory.create(fis);
//获取第一个sheet页
sheet = wb.getSheetAt(0);
//创建第一行
row = sheet.createRow(0);
//创建第一列
cell = row.createCell(0);