使用spring将数据从数据库导出到xlsx文件(Excel)
我需要使用spring将数据从数据库导出到excel文档。 但当我从控制器文档下载时,我得到的消息是当前文件或错误的扩展名使用spring将数据从数据库导出到xlsx文件(Excel),excel,database,spring-boot,export,Excel,Database,Spring Boot,Export,我需要使用spring将数据从数据库导出到excel文档。 但当我从控制器文档下载时,我得到的消息是当前文件或错误的扩展名 private static final String EXCEL_FILE_NAME = "UserExcelExport.xlsx"; @GetMapping("/download") public void download(HttpServletResponse response) throws Exception { List<User>
private static final String EXCEL_FILE_NAME = "UserExcelExport.xlsx";
@GetMapping("/download")
public void download(HttpServletResponse response) throws Exception {
List<User> users = userService.getUsers();
Workbook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("All Users List");
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("Username");
header.createCell(1).setCellValue("First name");
header.createCell(2).setCellValue("Last name");
header.createCell(3).setCellValue("E-mail");
int rowNum = 1;
for (User user : users) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(user.getUsername());
row.createCell(1).setCellValue(user.getFirstName());
row.createCell(2).setCellValue(user.getLastName());
row.createCell(3).setCellValue(user.getEMail());
}
response.setHeader("Content-disposition", "attachment; filename=" + EXCEL_FILE_NAME);
workbook.write(response.getOutputStream());
}
private静态最终字符串EXCEL\u FILE\u NAME=“UserExcelExport.xlsx”;
@GetMapping(“/下载”)
公共无效下载(HttpServletResponse)引发异常{
List users=userService.getUsers();
工作簿=新的HSSF工作簿();
Sheet Sheet=workbook.createSheet(“所有用户列表”);
行标题=sheet.createRow(0);
header.createCell(0.setCellValue(“用户名”);
header.createCell(1.setCellValue(“名字”);
header.createCell(2.setCellValue(“姓氏”);
header.createCell(3.setCellValue(“电子邮件”);
int rowNum=1;
for(用户:用户){
Row-Row=sheet.createRow(rowNum++);
row.createCell(0.setCellValue(user.getUsername());
row.createCell(1.setCellValue(user.getFirstName());
row.createCell(2.setCellValue(user.getLastName());
row.createCell(3).setCellValue(user.getEMail());
}
response.setHeader(“内容处置”、“附件;文件名=“+EXCEL\u文件名”);
write(response.getOutputStream());
}
缺少内容类型:
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
还可以使用XSSF工作簿生成.xlsx
文件:
XSSF工作簿wb=新XSSF工作簿()
编辑~~~~
下面是一个完整的例子,我使用SpringBoot 2.2.2和POI 3.15
@GetMapping(value = "/main/export")
public void export(HttpServletResponse response) throws Exception {
// user list
List<UserDto> users = new ArrayList<>();
users.add(new UserDto(1L, "user1"));
users.add(new UserDto(2L, "user2"));
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("All Users List");
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("Username");
header.createCell(1).setCellValue("First name");
header.createCell(2).setCellValue("Last name");
header.createCell(3).setCellValue("E-mail");
int rowNum = 1;
for (UserDto user : users) {
Row aRow = sheet.createRow(rowNum++);
aRow.createCell(0).setCellValue(user.getId());
aRow.createCell(1).setCellValue(user.getName());
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("content-disposition", "attachment; filename=myfile.xlsx");
workbook.write(response.getOutputStream());
}
@GetMapping(value=“/main/export”)
公共void导出(HttpServletResponse)引发异常{
//用户列表
列表用户=新建ArrayList();
添加(新UserDto(1L,“user1”);
添加(新UserDto(2L,“user2”);
XSSFWorkbook工作簿=新XSSFWorkbook();
Sheet Sheet=workbook.createSheet(“所有用户列表”);
行标题=sheet.createRow(0);
header.createCell(0.setCellValue(“用户名”);
header.createCell(1.setCellValue(“名字”);
header.createCell(2.setCellValue(“姓氏”);
header.createCell(3.setCellValue(“电子邮件”);
int rowNum=1;
for(UserDto用户:用户){
Row aRow=sheet.createRow(rowNum++);
createCell(0).setCellValue(user.getId());
createCell(1).setCellValue(user.getName());
}
setContentType(“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
setHeader(“内容处置”、“附件;文件名=myfile.xlsx”);
write(response.getOutputStream());
}
我也有同样的问题。
我试着利用你的建议
@GetMapping("/download")
公共无效下载(HttpServletResponse)引发异常{
List<User> users = userService.getUsers();
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("All Users List");
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("Username");
header.createCell(1).setCellValue("First name");
header.createCell(2).setCellValue("Last name");
header.createCell(3).setCellValue("E-mail");
int rowNum = 1;
for (User user : users) {
Row aRow = sheet.createRow(rowNum++);
aRow.createCell(0).setCellValue(user.getUsername());
aRow.createCell(1).setCellValue(user.getFirstName());
aRow.createCell(2).setCellValue(user.getLastName());
aRow.createCell(3).setCellValue(user.getEMail());
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("content-disposition", "attachment; filename=myfile.xlsx");
workbook.write(response.getOutputStream());
List users=userService.getUsers();
XSSFWorkbook工作簿=新XSSFWorkbook();
Sheet Sheet=workbook.createSheet(“所有用户列表”);
行标题=sheet.createRow(0);
header.createCell(0.setCellValue(“用户名”);
header.createCell(1.setCellValue(“名字”);
header.createCell(2.setCellValue(“姓氏”);
header.createCell(3.setCellValue(“电子邮件”);
int rowNum=1;
for(用户:用户){
Row aRow=sheet.createRow(rowNum++);
createCell(0).setCellValue(user.getUsername());
createCell(1).setCellValue(user.getFirstName());
createCell(2).setCellValue(user.getLastName());
createCell(3).setCellValue(user.getEMail());
}
setContentType(“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
setHeader(“内容处置”、“附件;文件名=myfile.xlsx”);
write(response.getOutputStream());
}
但当我从controller文档下载时,我得到以下信息:
我试着利用你的建议。但是生成了一个损坏的文件。编辑了答案后,您需要对XLSX文件使用不同的方法新注释,我有相同的问题已编写了一个我能够运行的完整示例,注意我使用Office for 365,不确定您的版本是否不同