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?
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
Vous devez vous connecter pour publier un commentaire.
Utiliser ce code JSP et de générer le fichier excel avec succès.J'ai donné d'entrée de fichier excel par le biais de la base de données, vous pouvez aussi donner les saisies manuelles.
Basé sur réponse il ressemble le point important est de définir la longueur du contenu.
OriginalL'auteur amy