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);
上一篇下一篇

猜你喜欢

热点阅读