Génération de documents Word côté serveur

Fermé
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - Modifié par sebsauvage le 8/02/2011 à 10:51
 rubinse - 28 févr. 2015 à 08:18
Bonjour,

mon site web doit générer des documents Word côté serveur.

La solution retenue a été de générer du HTML contenant des balises et CSS spécifiques Word.
Ça marche assez bien, y compris avec des choses comme les sauts de page.
Exemple:

Ce code html: http://sebsauvage.pastebin.com/VbEQYkPQ
Donne ceci une fois ouvert dans Word: https://i.imgur.com/9o211.png


Mais j'ai un soucis: Je n'arrive pas à insérer une table des matières.

Je m'arrache les cheveux sur l'horreur du code HTML généré par Word
(et même la documentation officielle de Microsoft n'aide pas :
https://docs.microsoft.com/en-us/previous-versions/office/developer/office2000/aa155477(v=office.10)?redirectedfrom=MSDN )

Avez-vous déjà réussi ?
A voir également:

6 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
8 févr. 2011 à 16:30
Bon plutôt que continuer à philosopher seul dans cette discussion, j'ai créé une page sur mon wiki et je continue là-bas:
https://sebsauvage.net/wiki/doku.php?id=word_document_generation
1
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
Modifié par sebsauvage le 8/02/2011 à 11:31
Bon je me répond à moi-même.


Voici le code (quasi-minimal) pour insérer une table des matières en HTML MS Office:

<p class=MsoToc1> 
<!--[if supportFields]> 
<span style='mso-element:field-begin'></span> 
TOC \o "1-3" \u 
<span style='mso-element:field-separator'></span> 
<![endif]--> 
<span style='mso-no-proof:yes'>Table des matières - Faites un clic-droit -> Mettre à jour les champs</span> 
<!--[if supportFields]> 
<span style='mso-element:field-end'></span> 
<![endif]--> 
</p>


Ça marche très bien. L'utilisateur doit juste faire "Clic-droit" > "Mettre à jour les champs".

Voilà ce que ça donne:
https://i.imgur.com/ffbtQ.png
https://i.imgur.com/lXxbo.png
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
8 févr. 2011 à 11:27
Et si vous cherchez les options du champ dynamique "TOC", c'est là:
http://office.microsoft.com/en-us/word-help/field-codes-toc-table-of-contents-field-HP005186201.aspx
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
Modifié par sebsauvage le 8/02/2011 à 11:46
Notez que ces documents générés peuvent être renommés en .doc et Word les ouvrira sans aucun problème.

Il est également possible d'inclure des macros (je ne sais plus comment, mais j'ai déjà vu ça.)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
Modifié par sebsauvage le 8/02/2011 à 15:44
Bon pour continuer mon investigation: L'utilisation d'entête et pieds de page fonctionne, mais il est nécessaire de les placer dans des fichiers html extérieurs au corps du document (sinon ils apparaissent en copie en fin de document).

Il en va de même pour les images.

Conséquence: il faut générer un fichier mhtml et non un seul fichier html.

mhtml n'est rien d'autre qu'un simple fichier MIME 1.0 contenant les différents fichiers html (Microsoft Office HTML) et les images.
Renommé en .doc, Word l'ouvre comme une fleur.

Je mettrai des exemples quand j'aurai avancé (ici ou sur mon wiki).

Pour résumer: C'est un peu chiant (plusieurs fichiers à créer, utiliser du code HTML spécifique à MS Word et créer un fichier MIME), mais c'est réalisable: On peut générer des fichiers Word côté serveur sans utiliser Word.
0
Bonjour,

Je rencontre un probleme lors de la génération du word,

la génération se passe tres bien mais il insert plusieurs ligne dans le texte génerer,

vous avez une idée?

Merci pour votre réponse

Fabrice
0