ExcelPOITool xlsx

Bonjour,
Pour mon projet je crée un fichier en .xlsx (demande du client) et j’aimerai pouvoir le télécharger directement en fin de création et ne pas avoir à l’enregistrer dans un champ accessible aux utilisateurs afin qu’il le télécharge.
Dans un ancien projet nous avions utiliser la classe ExcelPOITool dont la fonction generateToByteArray();
Mais lorsque j’utilise le constructeur de ExcelPOITool pour un fichier xlsx j’ai ce message d’erreur :
The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

Pourriez vous m’éclairer sur mon souci ?

Merci d’avance !

2 sujets distincts:

  1. Pour avoir un bouton qui publie + télécharge il faut utiliser le mécanisme des templates de publication, cf. https://www.simplicite.io/resources/documentation/01-core/publication-examples.md

  2. Le ExcelPOITool ne gère pour le moment que les formats legacy Excel (.xls). On va regarder pour l’étendre aux formats actuels (.xlsx), en attendant vous pouvez toujours taper sur les APIs POI directement

Si je fait une publication prenant une méthode, il faut que la méthode retourne un byte[] et le fichier créé dans la méthode et convertit en byte[] sera automatiquement téléchargé ?

Oui dans le cas d’une méthode de publication qui génère du contenu binaire (PDF, XLS(X), DOC(X), … ce type “forcé” étant indiqué au niveau du paramétrage de la publication) il faut impérativement retourner un byte array (et le socle s’en débrouille)

Il y a divers exemples de publication dans la démo:

1 Like

L’évolution de ExcelPOITool a été faite, il y a désormais un paramètre supplémentaire sur les constructeurs concernés pour dire si on utilise le format OpenXML (.xlsx)

Ex (cas d’un workbook généré from scratch):

var xls = new ExcelPOITool(true); // true = XLSX, false = legacy XLS
var s = xls.newSheet("MyNewSheet");
var r = xls.newRow(0);
var c = xls.newCell(0, "Hello World !");
r.add(c);
s.add(r);
xls.add(s);
var bytes = xls.generateToByteArray();

Voir https://www.simplicite.io/resources/4.0/javadoc/com/simplicite/util/tools/ExcelPOITool.html#ExcelPOITool-boolean-

Ca a été poussé sur la branche master

1 Like

Et tant qu’on y était on a refactoré les exports Excel standards pour que ça génère du XLSX plutôt que du XLS legacy

1 Like