使用Apache POI导出到Java的Excel

我使用Apache POI以excel格式导出数据。 导入进展顺利,但是当我尝试打开文档时,我有这个消息“Excel在文档”toto.xls“中遇到了无法读取的内容。是否要恢复此工作簿的内容?如果此工作簿的源是可靠的点击是。“

下面是导出excel的java代码

public void exportExcel() throws IOException { // Creation workbook vide XSSFWorkbook workbook = new XSSFWorkbook(); // Creation d'une feuille vierge XSSFSheet sheet = workbook.createSheet("Participant"); List<toto> totoList = this.getAllToto; int indiceMap = 2; Map<String, Object[]> data = new TreeMap<String, Object[]>(); data.put("1", new Object[] { "name", "surname" }); for (TotoBean l : totoList) { data.put(Integer.toString(indiceMap), new Object[] { l.getName(), l.getSurname() }); indiceMap++; } // Iteration sur la map data et ecriture dans dans la feuille excel Set<String> keyset = data.keySet(); int rownum = 0; for (String key : keyset) { Row row = sheet.createRow(rownum++); Object[] objArr = data.get(key); int cellnum = 0; for (Object obj : objArr) { Cell cell = row.createCell(cellnum++); if (obj instanceof String) cell.setCellValue((String) obj); else if (obj instanceof Integer) cell.setCellValue((Integer) obj); } } DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); String dateToday = dateFormat.format(new Date()); // Ecriture du fichier excel comme attachement ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); workbook.write(outByteStream); byte[] outArray = outByteStream.toByteArray(); String fileOut = "Liste-toto[" + this.getCity() + "]" + dateToday + ".xlsx"; HttpServletResponse response = (HttpServletResponse) FacesContext .getCurrentInstance().getExternalContext().getResponse(); response.setContentType("application/vnd.ms-excel"); response.setContentLength(outArray.length); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileOut + "\""); OutputStream outStream = response.getOutputStream(); outStream.write(outArray); outStream.flush(); outStream.close(); } 

你的问题是这两条线的不匹配

 XSSFWorkbook workbook = new XSSFWorkbook(); 

 response.setContentType("application/vnd.ms-excel"); 

如果您确实想生成.xls旧式Excel工作簿,则需要将第一行更改为HSSFWorkbook而不是XSSFWorkbook

如果您确实需要生成.xlsx Excel工作簿,则第二行的内容types必须是正确的.xlsx文件,这将是:

 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 

你可以考虑打开它“作为pipe理员”。 根据这个( https://superuser.com/questions/401714/how-do-i-resolve-the-error-excel-found-unreadable-content-in-filename )它的解决方法。