Convertir proprement des documents Word en HTML

Oct 27, 2010

word_2D00_2010_2D00_icon.png

Nous allons revenir aujourd’hui sur un article plus technique pour faire un peu de développement Office. (ok c’est pas encore du développement SharePoint mais c’est pas mal non plus ;-))

Récemment pour le laboratoire Microsoft j’ai dû développer un petit applicatif (client lourd) pour permettre la publication des articles des membres. (en effet, ce « détail » technique nous bloquait dans la publication de plus de 500 articles…)

Il faut savoir qu’actuellement les articles sont rédigés sous Word par les élèves de SUPINFO membres du laboratoire Microsoft et que le site ne prend qu’un format très particulier fait à partir d’ASP (si si la techno qui est pratiquement aussi vieille que moi)

Il fallait donc depuis un document Word obtenir de l’html et avoir les éventuelles images correctement converties. Le plus aurait été de pouvoir valider automatiquement les révisions en attente et supprimer les commentaires (et d’autres détails…)

Voilà le décor est posé, passons au code maintenant.

Il faut savoir que depuis Microsoft Office Word 2003 il existe un assembly Microsoft.Office.Interop.Word  très pratique pour faire du développement Word qui nous permet d’accéder à la majorité des fonctionnalités de Word. Le bémol étant tout de même qu’il faut que Word soit installé sur le poste cible.

Commençons donc par référencer cette assembly magique dans le projet et par importer les symboles dans notre portion de code :

using Microsoft.Office.Interop.Word;

Voici le code à proprement dit:

String PathdeMonDoc = “…";

String PathRenduHTML = “…";

//On commence par instancier une nouvelle application word qui traitera notre document

//Dans le cadre d’un module supplémentaire de word il nous aurait suffit de récupérer l’instance courante

Microsoft.Office.Interop.Word.Application mywordapp = new Microsoft.Office.Interop.Word.Application();

//On demande à l’application d’ouvrir notre document

Document myword = mywordapp.Documents.Open(PathdeMonDoc);

//On convertit le document vers la dernière version de document Word, cette méthode lève une exception si

//le document Word est déjà à la dernière version, on pourrait vérifier au préalable mais je vous laisse chercher ;-)

try

{

myword.Convert();

}

catch { }

//On accepte toutes les révisions en attente

myword.AcceptAllRevisions();

//S’il y a des commentaires on les supprime

if (myword.Comments.Count != 0)

{

myword.DeleteAllComments();

}

//On sauvegarde au format HTML, notez que vous pouvez changer le format grâce à l’énumération WdSaveFormat

myword.SaveAs2(PathRenduHTML, WdSaveFormat.wdFormatFilteredHTML);

myword.Close(); //On ferme le document word

mywordapp.Quit(WdSaveOptions.wdSaveChanges); //On ferme l’application, en sauvegardant les modifications en attente des fois que…

//Notez que cela ne ferme que l’instance que l’on utilise, si l’utilisateur était en train de travailler sur un autre document il ne sera pas perturbé

Voilà j’espère que ces quelques explications vous auront permis de vous lancer dans le traitement automatisé de documents Word. Dans mon cas j’ai ensuite traité le HTML rendu par Word à grand coup de regex pour le faire passer dans un format valide pour le site du labo.

Rendez-vous sur le site du labo sur lequel il y aura bientôt beaucoup de publications, sinon à bientôt sur mon blog et merci pour votre lecture :-)


Edité la dernière fois le 6 Sep 2021 par Vincent


Tags: