导出excel报表
添加依赖
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
编写接口服务
/**
* 生成用户信息Excel文件
* @param pageRequest 要导出的分页查询参数
* @return
*/
File createUserExcelFile(PageRequest pageRequest);
服务实现
public static File createUserExcelFile(List<?> records) {
if (records == null) {
records = new ArrayList<>();
}
/**
*XSSFWorkbook : 这个类有读写Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。它与MS-Office版本2007或更高版本兼容
*/
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();//创建一个XSSFSheet本工作簿,将其添加到表,并返回高层表示。
Row row0 = sheet.createRow(0);
int columnIndex = 0;
row0.createCell(columnIndex).setCellValue("No");
row0.createCell(++columnIndex).setCellValue("ID");
row0.createCell(++columnIndex).setCellValue("用户名");
row0.createCell(++columnIndex).setCellValue("昵称");
row0.createCell(++columnIndex).setCellValue("机构");
row0.createCell(++columnIndex).setCellValue("角色");
row0.createCell(++columnIndex).setCellValue("邮箱");
row0.createCell(++columnIndex).setCellValue("手机号");
row0.createCell(++columnIndex).setCellValue("状态");
row0.createCell(++columnIndex).setCellValue("头像");
row0.createCell(++columnIndex).setCellValue("创建人");
row0.createCell(++columnIndex).setCellValue("创建时间");
row0.createCell(++columnIndex).setCellValue("最后更新人");
row0.createCell(++columnIndex).setCellValue("最后更新时间");
for (int i = 0; i < records.size(); i++) {
SysUser user = (SysUser) records.get(i);
Row row = sheet.createRow(i + 1);
for (int j = 0; j < columnIndex + 1; j++) {
row.createCell(j);
}
columnIndex = 0;
row.getCell(columnIndex).setCellValue(i + 1);
row.getCell(++columnIndex).setCellValue(user.getId());
row.getCell(++columnIndex).setCellValue(user.getName());
row.getCell(++columnIndex).setCellValue(user.getNickName());
row.getCell(++columnIndex).setCellValue(user.getDeptName());
row.getCell(++columnIndex).setCellValue(user.getRoleNames());
row.getCell(++columnIndex).setCellValue(user.getEmail());
row.getCell(++columnIndex).setCellValue(user.getStatus());
row.getCell(++columnIndex).setCellValue(user.getAvatar());
row.getCell(++columnIndex).setCellValue(user.getCreateBy());
row.getCell(++columnIndex).setCellValue(DateTimeUtils.getDateTime(user.getCreateTime()));
row.getCell(++columnIndex).setCellValue(user.getLastUpdateBy());
row.getCell(++columnIndex).setCellValue(DateTimeUtils.getDateTime(user.getLastUpdateTime()));
}
return PoiUtils.createExcelFile(workbook, "download_user");
}
编写控制器
@PostMapping(value = "/exportExcelUser")
public void exportExcelUser(@RequestBody PageRequest pageRequest, HttpServletResponse res) {
File file = sysUserService.createUserExcelFile(pageRequest);
FileUtils.downloadFile(res, file, file.getName());
}
工具类代码
PoiUtils
public class PoiUtils {
/**
* 生成Excel文件
* @param workbook
* @param fileName
* @return
*/
public static File createExcelFile(Workbook workbook, String fileName) {
OutputStream stream = null;
File file = null;
try {
file = File.createTempFile(fileName, ".xlsx");
stream = new FileOutputStream(file.getAbsoluteFile());
workbook.write(stream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(workbook);
IOUtils.closeQuietly(stream);
}
return file;
}
}
FileUtils
/**
* 文件相关操作
* @author Louis
* @date Jan 14, 2019
*/
public class FileUtils {
/**
* 下载文件
* @param response
* @param file
* @param newFileName
*/
public static void downloadFile(HttpServletResponse response, File file, String newFileName) {
try {
response.setHeader("Content-Disposition", "attachment; filename=" + new String(newFileName.getBytes("ISO-8859-1"), "UTF-8"));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
InputStream is = new FileInputStream(file.getAbsolutePath());
BufferedInputStream bis = new BufferedInputStream(is);
int length = 0;
byte[] temp = new byte[1 * 1024 * 10];
while ((length = bis.read(temp)) != -1) {
bos.write(temp, 0, length);
}
bos.flush();
bis.close();
bos.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}