Bonjour,
Tout est dans le titre. J'aimerai savoir s'il est possible à partir d'un fichier Excel d'insérer son contenu dans le corps du mail en utilisant Javamail. Toute aide sera la bienvenue !
Merci à tous d'avance.
Bonjour,
Tout est dans le titre. J'aimerai savoir s'il est possible à partir d'un fichier Excel d'insérer son contenu dans le corps du mail en utilisant Javamail. Toute aide sera la bienvenue !
Merci à tous d'avance.
Salut,
Par "insérer dans le corps du message", je suppose que tu voudrais qu'on visualise le contenu du fichier Excel, et, ce sur un maximum de clients mail, sans avoir nécessairement Excel installé, ou sur un système qui ne peut même pas faire tourner Excel. En plus, il faut définir ce qu'est "voir" : voir un classeur, ou une feuille de calcul, une partie de feuille... Dans ce cadre, je ne vois qu'une solution : convertir le contenu à voir en un élément capable d'être inséré dans un mail (html), donc soit en html (soit en image). Pour convertir un fichier Excel en html, on peut utiliser l'API Apache POIFS et son ExcelToHtmlConverter.
Merci pour ta réponse rapide. Pour mon besoin tu as vu juste. J'aimerai qu'on puisse visualiser le contenu d'une seule feuille (dans son intégralité) Excel sans passer par les pièces jointes.
Si je convertis mon fichier Excel en html, aurais-je le même rendu graphique (espacement, couleur, etc.) ?
Oui, pour les couleurs. Pour l'espacement, c'est moins satisfaisant. Mais je t'ai dis une bêtise : pour les xlsx, on ne peut pas utiliser ExcelToHtmlConverter (qui ne fonctionne que pour les Excel 97).
C'est un peu plus sioux qu'avec les xls 97 : il y a plus de bibliothèques à charger (en particulier dom4j et xmlbeans).
Voici un code exemple de principe :
EDIT : en y regardant de plus près, ToHtml est une classe d'exemple, qu'il s'agit de modifier à sa sauce pour adapter le rendu à ton besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public class TestClass { public static void main(String[] args) { try { test(); } catch ( TransformerFactoryConfigurationError | IOException e) { e.printStackTrace(); } } public static void test() throws IOException { try (InputStream is = new FileInputStream(new File("c:/temp/test.xlsx"))) { XSSFWorkbook workbook = new XSSFWorkbook(is); try (FileWriter fileWriter = new FileWriter(new File( "c:/temp/testxls.html"))) { ToHtml toHtml = ToHtml.create(workbook, fileWriter); toHtml.setCompleteHTML(true); toHtml.printPage(); } } } }
Ayant des fichiers xls j'ai utilisé ExcelToHtmlConverter. La conversion se passe bien et j'obtiens un fichier html. Par contre le rendu n'est pas satisfaisant..
- La taille des lignes et des colonnes n'est pas respecté
- La largeur du document non plus
- La largeur des bordures non plus
- Les lettres d'Excel A, B.. etc apparaissent
Comment puis-je modifier ces paramètres ?
Merci d'avance !
Salut,
Tu peux utiliser toHtml() aussi pour les Excel 97. Cela dit, tout ne fonctionnera pas directement exactement comme tu le veux : les deux sont des bases. ExcelToHtmlConverter a été écris i l y a longtemps et est plus rigide (toHtml est un exemple, ExcelToHtmlConverter est une classe de utilitaire).
Ensuite, pour ne pas afficher les lignes et colonnes d'étiquettes, il y a 2 options désactivables par setOutputRowNumbers(false) et setOutputColumnHeaders(false).
Ensuite pour la taille des colonnes et des lignes, ça fonctionne avec mon test (j'utilise Poifs 3.0.1). Je ne sais pas ce que tu appelles la largeur du document. Pour moi la largeur du document c'est la somme de la largeur de toutes les colonnes.
Pour les épaisseurs de bordure, c'est plus problématique, parce que c'est une méthode static de AbstractExcelUtils qui est utilisé, et que son implémentation est inexacte. En plus, ExcelToHtmlConverter ne permet pas de sélectionner la feuille de calcul. Et affiche le nom de la feuille, ce qu'on ne veut pas forcément, etc.
Je procéderais personnellement en reprenant le code de ExcelToHtmlConverter en l'adaptant (ce qu'on ferait avec l'exemple toHtml(), qui a des problèmes similaires - il se plante par exemple le style des bordures).
Voici un exemple que j'ai fait pour tester :
ExcelToHtmlConverter.java
et le code pour l'exécuter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class TestXls { public static void main(String[] args) { try { test(); } catch ( TransformerException | IOException | ParserConfigurationException e) { e.printStackTrace(); } } public static void test() throws IOException, ParserConfigurationException, TransformerException { ExcelToHtmlConverter.Configuration configuration = new ExcelToHtmlConverter.Configuration() { @Override public boolean includeSheet(int index) { return index==0; } }; configuration.withTitle=false; final HSSFWorkbook workbook = ExcelToHtmlUtils.loadXls( new File("c:/temp/test.xls") ); ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter( DocumentBuilderFactory.newInstance().newDocumentBuilder() .newDocument() ); excelToHtmlConverter.setOutputRowNumbers(false); excelToHtmlConverter.setOutputColumnHeaders(false); excelToHtmlConverter.processWorkbook( workbook, configuration ); try (FileWriter fileWriter = new FileWriter("c:/temp/xls.html") ) { Transformer transformer = TransformerFactory.newInstance() .newTransformer(); transformer.setOutputProperty( OutputKeys.ENCODING, "utf-8" ); transformer.setOutputProperty( OutputKeys.INDENT, "yes" ); transformer.setOutputProperty( OutputKeys.METHOD, "html" ); transformer.transform( new DOMSource( excelToHtmlConverter.getDocument() ), new StreamResult( fileWriter ) ); } } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager