I use Apache POI to export data in excel format. The import goes well, but when I try to open the document I have this message "Excel has encountered an unreadable content in the document "toto.xls". Would you want to recover the contents of this workbook? If the source of this workbook is reliable click yes. "
Below is the java code of export excel
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();
}