Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用spring将数据从数据库导出到xlsx文件(Excel)_Excel_Database_Spring Boot_Export - Fatal编程技术网

使用spring将数据从数据库导出到xlsx文件(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>

我需要使用spring将数据从数据库导出到excel文档。 但当我从控制器文档下载时,我得到的消息是当前文件或错误的扩展名

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,不确定您的版本是否不同