Envoi d'export Excel par mail

Request description

Bonjour,
J’essaie de mettre en place un envoi mail d’export Excel mais je n’y arrive pas :sweat_smile:

Il s’agit d’un objet SELECT dont je veux exporter la liste au format Excel et l’envoyer en PJ d’un mail.
Ca a l’air simple mais je ne m’en sors pas, voici mes questions :

  • l’export Excel se fait via le ExcelTool au format Outputstream, y-a-t-il un autre moyen ?

  • pour attacher un mail en utilisant mailAttach, on dirait que j’ai le choix entre un File et un ObjectField :

    • est-ce que je dois convertir l’outpustream en File, ou je me complique la vie ?
    • sinon si je dois stocker l’export dans un ObjectField, où faire ça dans le sens où j’aurais besoin d’un attribut global (non lié à une instance de mon objet)

Merci d’avance pour votre aide !
Emmanuelle

[Platform]
Status=OK
Version=6.3.11
Variant=full
BuiltOn=2026-06-19 12:28

Bonjour Emmanuelle,
Tu peux utiliser la fonction ExcelTool.generateToByteArray() plutôt qu’un export Outputstream pour créer ton MailAttach.

Voici un exemple:

    public String sendXls(String rcpt, String subject, String body, String fileName) {
        try {
            ExcelTool xls = new ExcelTool(true); // true = XLSX format
            /*
            add data to Excel file
            */
            MailTool mail = new MailTool();
            mail.addRcpt(rcpt);
            mail.setSubject(subject);
            mail.setBody(body);
            mail.addAttach(new MailAttach(xls.generateToByteArray(), fileName));
            mail.send();
            return null;
        } catch (Exception e) {
            AppLog.error(null, e, getGrant());
            return e.getMessage();
        }
    }

Si ton fichier est trop volumineux pour cette méthode, n’hésite pas à revenir vers moi.
Candice

Bonjour Candice,

Merci beaucoup pour ton retour, ça fonctionne parfaitement.
Par contre j’ai un souci avec le fichier Excel généré qui est corrompu, est-ce que tu aurais une idée ?

public void exportKPI()
	{
		try
		{
			ExcelTool tool = new ExcelTool(true);


			tool.export(this, null, "full", null);

			MailTool mail = new MailTool(getGrant());
			mail.addRcpt("emmanuelle.fenice-extern@mobilize-fs.com");
			mail.setSubject("Test Mail");
	        mail.addAttach(new MailAttach(tool.generateToByteArray(), "End_of_month_snapshot.xlsx"));
			mail.setBody("<p>Hello</p>");
			mail.send();
		} catch (Exception e) {
            AppLog.error(null, e, getGrant());
        }
	}

L’erreur à l’ouverture

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error052600_01.xml</logFileName>
<summary>Errors were detected in file 'exportpoi-1783347195120-QyseGZ8LN9Efhhon9SatamV3va5LAXxX.xlsx'</summary>
<removedParts><removedPart>Removed Part: /xl/styles.xml part with XML error.  (Styles) A text/xml declaration may occur only at the very beginning of input. Line 2, column 14450.</removedPart></removedParts>
<removedRecords><removedRecord>Removed Records: Cell information from /xl/worksheets/sheet1.xml part</removedRecord></removedRecords>
<repairedRecords><repairedRecord>Repaired Records: Cell information from /xl/worksheets/sheet1.xml part</repairedRecord></repairedRecords></recoveryLog>

Bonjour Emmanuelle,

Pourrais-tu me confirmer que tu veux exporter la liste de tes objets en tenant compte de la recherche ?

Après vérification, tu peux également utiliser un OutputStream dans MailAttach:

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ExcelTool xls = new ExcelTool(true); // true = XLSX format
    xls.export(this, null, "full", out);
    mail.addAttach(new MailAttach(out,fileName));

Si l’erreur persiste, pourrais-tu m’indiquer si tu as des styles particuliers sur tes champs afin de reproduire dans des conditions similaires aux tiennes ?
Merci
Candice

Bonjour Candice,

Tu as raison, j’ai un display spécifique de cet objet.
J’ai fait le test avec une liste basique et je n’ai pas le souci.

Dans mon cas problématique, j’ai un objet externe qui présente plusieurs onglets avec un filtre date. Mon objet SELECT est affiché dans le dernier onglet via un displayList. Je te mets les ressources en PJ.

RciCompletionStatistics_SCRIPT.js (4.1 KB)
RciCompletionStatistics_HTML.html (1.9 KB)
RciCompletionStatistics.less (435 Bytes)

Candice, je ferme le ticket car cela me convient de faire l’export via la liste brute.

Merci pour ton aide et bonne journée !

Emmanuelle