web-dev-qa-db-fra.com

Comment puis-je convertir POI HSSFWorkbook en octets?

Appeler Simple toBytes() produit les octets mais exel lance Warning.

Informations sur le document perdu

La recherche sur Google m'a donné link et en regardant Javadocs pour la feuille de calcul et le POI HOW-TO dire des choses similaires. Fondamentalement, je ne peux pas obtenir Bytes sans perdre des informations et je devrais utiliser la méthode write à la place.

Bien que l'écriture fonctionne correctement, j'ai vraiment besoin d'envoyer les octets. Existe-t-il un moyen de le faire? C'est-à-dire obtenir les octets sans recevoir d'avertissement.

32
Shahzeb

Comme le disait cette liste de diffusion

L'appel HSSFWorkbook.getBytes() ne renvoie pas toutes les données nécessaires pour reconstruire un fichier Excel complet.

Vous pouvez utiliser la méthode d'écriture avec un ByteArrayOutputStream pour obtenir le tableau d'octets.

ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
    workbook.write(bos);
} finally {
    bos.close();
}
byte[] bytes = bos.toByteArray();

(L'appel close n'est pas vraiment nécessaire pour un ByteArrayOutputStream, mais à mon humble avis, il est bon de l'inclure de toute façon au cas où il serait changé ultérieurement en un autre type de flux.)

73
Jörn Horstmann

Que diriez-vous:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
byte[] xls = baos.toByteArray();

Pour obtenir un fichier Excel complet, vous devez appeler la méthode d'écriture (OutputStream). Si vous voulez des octets de cela, donnez juste un ByteArrayOutputStream

15
Gagravarr