Streaming d'un classeur POI dans le flux de sortie du servlet
- Je construire une très grande PI classeur, sur mon serveur web. Tenir l'ensemble du classeur dans la mémoire , ne sera pas à l'échelle de plusieurs demandes simultanées. Est il possible que je peux progressivement écrire le classeur à la servlet flux de sortie. Cela devrait permettre de réduire le temps de réponse , ainsi que de rendre le processus efficace en terme de mémoire.
source d'informationauteur The Machine
Vous devez vous connecter pour publier un commentaire.
Si vous êtes sur le point de générer Excel 2007 (xslx) ensuite, vous pouvez adapter l'approche de BigGridDemo.java comme décrit ici: http://web.archive.org/web/20110821054135/http://www.realdevelopers.com/blog/code/excel
La solution est de laisser PI générer un conteneur xslx comme un modèle et le flux réel de données de feuille de calcul au format XML dans un zip flux de sortie. La rationalisation de la génération XML est ensuite à vous de voir.
Malheureusement, c'est impossible quand il n'y a pas moyen de données séquentielles. Je vous suggère de chercher un autre format, par exemple au format CSV ou XML. Les deux peuvent être écrits de façon séquentielle. Si ça vient d'une DB, il peut même être plus efficace depuis un décent DB a builtin installations efficacement l'exportation vers ces formats. Vous avez juste à diffuser les octets à partir de l'autre côté.
La situation s'est considérablement améliorée depuis le reste de l'réponses ont été écrites - Streaming est maintenant une partie de Apache Poi.
Voir le SXSSFWorkbook de classe, et l' la documentation ici. Il utilise un streaming fenêtre sur la feuille, les bouffées de chaleur anciennes lignes en dehors de la fenêtre pour les fichiers temporaires.
Ceci est basé sur la
BigGridDemo
approche utilisée dans hlg réponsemais qui fait maintenant partie de la distribution officielle.Voici l'exemple de la documentation:
Si vous utilisez JExcel
Il a un exemple de code pour lire les flux de code et d'un Servlet.
http://jexcelapi.sourceforge.net/resources/faq/
Le seul inconvénient de cette API ressemble, il ne supporte jusqu'à Excel 2003 inclusivement.
À l'aide de POI - Pouvez-vous ne pas créer le fichier et de servir du fichier d'octets à la servlet flux de sortie ?
Avez-vous essayé avec la méthode d'écriture directe à la HttpServletResponse.getOutputStream()?
Veuillez jeter un oeil à l'exemple suivant: