angularjs,spring启动,apache poi,不能生成excel文件

我正在尝试生成一个Excel文档。 我正在使用Apache POI版本3.14

我的控制器:

@RestController @RequestMapping("/excel") public class ExcelRest { @Autowired private ProfilDao profilDao; @RequestMapping(value = "/get", method = RequestMethod.GET) public ModelAndView getExcel(HttpServletRequest request, HttpServletResponse response) throws Exception{ response.setHeader("Content-disposition", "attachment; filename=testExcel.xls"); response.setContentType("application/vnd.ms-excel"); // I get a List of Profil. List<Profil> profils = profilDao.findAll(); return new ModelAndView(new ExcelProfilsBuilder(), "profils", profils); } } 

我的模型视图:

 public class ExcelProfilsBuilder extends AbstractXlsView { @Override protected void buildExcelDocument( Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { // On récupère les profiles provenant de la méthode REST @SuppressWarnings("unchecked") List<Profil> profiles = (List<Profil>) model.get("profils"); // create a new Excel sheet HSSFSheet sheet = (HSSFSheet) workbook.createSheet("Profiles"); sheet.setDefaultColumnWidth(30); // create style for header cells CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setFontName("Arial"); style.setFillForegroundColor(HSSFColor.BLUE.index); style.setFillPattern(CellStyle.SOLID_FOREGROUND); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setColor(HSSFColor.WHITE.index); style.setFont(font); // create header row HSSFRow header = sheet.createRow(0); header.createCell(0).setCellValue("Nom"); header.getCell(0).setCellStyle(style); header.createCell(1).setCellValue("Prénom"); header.getCell(1).setCellStyle(style); // create data rows int rowCount = 1; for (Profil profil : profiles) { HSSFRow aRow = sheet.createRow(rowCount++); aRow.createCell(0).setCellValue(profil.getName()); aRow.createCell(0).setCellValue(profil.getFirstname()); } } } 

为了完成,我使用AngularJs:

 $http.get('/excel/get').then( function(response){ var blob = new Blob([response], {type: "application/vnd.ms-excel"}); var objectUrl = URL.createObjectURL(blob); window.open(objectUrl); }, function(response){ //error case } ); 

我不知道为什么,但是当我收到我的文件时,其名称是例如“8a4c6f51-3323-4f1b-bc4b-bd041801e66c.xls”

我只有一个单元格:[Object object]

编辑:另一种方法是行不通的:

 @RequestMapping(value = "/get/excel", method = RequestMethod.GET) @ResponseBody public void getExcel(HttpServletResponse response) throws Exception{ response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment; filename=monFichier.xls"); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Utilisateurs"); HSSFRow user = sheet.createRow(0); HSSFCell name = user.createCell(0); name.setCellValue("Test"); try { workbook.write(response.getOutputStream()); } catch (IOException e) { } } 

编辑2:这是工作,如果我使用$ http.post而不是$ http.get:

  $http.post('/list/profil/get/excel',null, {responseType:'arraybuffer'}) .success(function (response) { console.log("plop"); var file = new Blob([response], {type: 'application/vnd.ms-excel'}); var fileURL = URL.createObjectURL(file); window.open(fileURL); }); 

但是我已经有一个错误的文件名。

代替

return new ModelAndView(new ExcelProfilsBuilder(), "profils", profils);

像这样回报…

 return new ModelAndView("excelProfilsBuilder", "profils", profils); 

资源包:

在应用程序类path下创buildviews.properties文件。 在eclipse中它位于/src/main/resources/views.properties下。 “ excelProfilsBuilder ”是在Excel 控制器中使用的新视图名称ModelAndView(“excelProfilsBuilder”,“employees”,employees);

views.properties文件中 ,添加此条目…

 excelProfilsBuilder.(class)=com.abc.def.ExcelProfilsBuilder