2014-10-13 7 views
0

Я использую POI Apache для экспорта данных в формате excel. Импорт идет хорошо, но когда я пытаюсь открыть документ, у меня есть это сообщение «Excel столкнулся с нечитаемым содержимым в документе« toto.xls ». Хотели бы вы восстановить содержимое этой книги? Если источник этой книги надежен нажмите да. "Экспорт в Excel на Java с использованием Apache POI

Ниже 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(); 
} 
+0

Я думаю, что XSSFSheet создает .xslx документ, а не .xls документа, – keuleJ

+0

Спасибо за ваш ответ, но XSLX не признают первенствовать документ – Franky

+0

К сожалению, я имею в виду XLSX конечно ... – keuleJ

ответ

3

Ваша проблема является неправильно матч этих двух линий

XSSFWorkbook workbook = new XSSFWorkbook(); 

и

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

Если вы действительно хотите создать .xls старше стиля книгу Excel, вам необходимо изменить первую строку, чтобы быть HSSFWorkbook, а не XSSFWorkbook

Если вы имели в виду, чтобы создать .xlsx Excel книги, то тип содержимого на второй линии должен быть правильный .xlsx один, который был бы:

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
Смежные вопросы