Apache POI - Travailler avec XSSFWorkbok + servlet réponse

Je vais avoir des problèmes dans mon application java pour permettre le téléchargement de fichiers XLSX.

suivant l'exemple affiché dans ce lien: Créer un fichier excel pour les utilisateurs à télécharger à l'aide d'Apache POI, j'ai essayé deux configurations à télécharger/enregistrer une feuille de calcul.

Première avec un .Fichier XLS:

response.setContentType("application/ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=testxls.xls");

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue("Some text");

ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
wb.write(outByteStream);

byte[] outArray = outByteStream.toByteArray();
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
outStream.flush();

Cela fonctionne.

Puis j'ai essayé avec un fichier XLSX:

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=testxls.xlsx");

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet();
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue("Some text");

ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
wb.write(outByteStream);

byte[] outArray = outByteStream.toByteArray();
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
outStream.flush();

Quand j'essaye de cela, je reçois le message: "Excel trouvé du contenu illisible dans "testxls.xlsx'. Voulez-vous récupérer le contenu de ce classeur? ...."

En dépit de ce message, la feuille de calcul s'ouvre normalement, mais j'ai vraiment envie de supprimer ce message.

Des idées?

Ce type est outByteStream?
Pourquoi avez-vous besoin d'une ByteArrayOutputStream? Ne pouvez-vous pas tout simplement wb.write(response.getOutputStream()) à la place?
J'ai essayé avec org.apache.commons.io.output.ByteArrayOutputStream et java.io.ByteArrayOutputStream
Essayé avec wb.write(response.getOutputStream()), mais le message persiste.
Si vous écrivez à la XSSFWorkbook dans un fichier plutôt que de la servlet, peut Excel ouvert que sans erreurs? Qui va vous permettre de travailler si vous avez un servlet sortie de problème, ou un problème XSSF

OriginalL'auteur Lucas_Mux | 2013-03-13