Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Julien Chable

He blogs, you blog, I blog ...

Archives

[Open XML] Le SDK Open XML 2.0 : Introduction et développement – 1ère partie

La vague Office 2010 est en train de gagner du terrain avec la mise à disposition des premières Beta aux testeurs et développeurs. Le format Open XML continue bien évidemment à être une pièce centrale de la future suite bureautique de Microsoft. D’ailleurs, le SDK Open XML v2 toujours en CTP depuis plus d’une année devrait s’imposer comme aussi un composant centrale dans la diffusion des documents Office en offrant la possibilités aux applications web/client de pouvoir générer ou consommer des documents … sans Office !

Voici un petit article, diffusé il y a quelques mois dans le magazine Programmez que je vous propose de découvrir ou redécouvrir le SDK Open XML v2.

Plus que tout autre type de documents numériques, les documents bureautiques (Word, Excel et PowerPoint) prennent une place de plus en plus importante dans la vie des entreprises et de ses employés. Souvent vecteur ou source d’informations multi format : texte, feuille de calculs ou encore présentation, ces fichiers représentent et stockent souvent une grande partie du savoir d’une entreprise. Le format de documents bureautiques Open XML issu originellement du savoir-faire de Microsoft en la matière, avant de devenir une norme internationale ISO en 2008, propose justement une structure fiable et flexible pour échanger et véhiculer la majorité des informations du quotidien.

Dans cet article, nous allons parcourir ensemble le SDK Open XML, dans sa deuxième version, afin de mieux comprendre comment aborder les projets utilisant le format Open XML et les outils mis à la disposition des développeurs avec cette nouvelle monture.

Prérequis :

  • Visual Studio 2008 SP1
  • .NET 3.5 SP1
  • SDK Open XML v2 CTP (lien en fin d’article)

Pour préparer la lecture de cet article, vous pouvez consulter les articles suivants :

I. Pourquoi un SDK Open XML v2 ?

L’arrivée de .NET 3.0 avait amené une première solution pour manipuler les documents Open XML, du moins au niveau de sa structure Open Packaging Convention, avec l’espace de nom System.IO.Packaging. La sortie du SDK Open XML, première version, allait un cran au-delà en proposant une encapsulation de la couche structurelle OPC des documents Open XML et en offrant un ensemble de classes typées pour chaque partie d’un document.

Cependant, cette première version présentait toujours la même limitation qu’avec System.IO.Packaging ; le fait qu’il fallait toujours manipuler le contenu XML des parties en lisant les spécifications.

Cette nouvelle version du SDK Open XML va quant à elle beaucoup plus loin, car elle offre une totale abstraction – bien qu’elle ne bloquera les plus experts d’entre vous qui désireraient créer le XML eux-mêmes – quand à la structure et au contenu en exposant un modèle objet complet de classes et d’énumération. La majorité des développeurs ne devrait plus trouver d’excuses pour ne pas générer ou à consommer des documents Office sur un serveur ou un client … sans Office !

En effet dans un effort de toujours rendre plus productif les développeurs, Microsoft n’a cessé depuis de fournir aux développeurs des outils pour créer ou consommer des documents Office ; et cela sans nécessiter aucune instance d’Office sur la machine hôte. C’était déjà une réalité avec la sortie de .NET 3 et l’espace de nom System.IO.Packaging, puis la sortie de la première version du SDK Open XML ; aujourd’hui Microsoft frappe fort à nouveau et confirme son engagement envers cette norme de documents bureautiques avec la sortie du SDK Open XML v2.

Le SDK Open XML v2 encapsule la partie structurelle du fichier – organiser selon la spécification Open Packaging Convention - et la structure XML des différentes parties d’un document dans un modèle objet simple et flexible à manipuler. Ceci dit, comment cela se traduit-il en pratique ? Un exemple étant plus parlant qu’un long discours, et pour vous faire une idée rapidement, voici le code nécessaire à un développeur pour créer un document Word entièrement fonctionnel avec le SDK v2 :

using (WordprocessingDocument package = WordprocessingDocument.Create(docName, WordprocessingDocumentType.Document))
{
// Ajouter une partie de contenu au document
package.AddMainDocumentPart();

// Créer le contenu de votre document
package.MainDocumentPart.Document =
new Document( 
new Body( 
new Paragraph( 
new Run( 
new Text("Hello World !")))));

 
// Enregistrer le contenu dans le document
package.MainDocumentPart.Document.Save();
}

La création de document bureautique n’a jamais été aussi simple ! Le SDK Open XML v2 gérera lui-même pour vous toutes les opérations de génération ou de manipulation de la structure XML et OPC. Pour résumer, vous pouvez manipuler entièrement un document grâce au modèle objet sans avoir jamais à créer vous-même une quelconque structure XML. Par rapport aux précédents SDK ou librairies disponibles, cette approche simplifie à l’extrême la vie des développeurs.

Deux manipulations sont nécessaires de votre part pour utiliser le SDK Open XML v2 : télécharger la CTP du SDK Open XML (cf lien en fin d’article) et ajouter la référence aux DLLs WindowsBase et DocumentFormat.OpenXml à votre projet.

image

Notez que le SDK supporte très bien la programmation avec Linq To XML – comme nous le verrons par la suite - qui permet de requêter ou de construire une structure XML très simplement et rapidement. Côté performance, notez qu’il vous faudra moins de 3 secondes pour générer 1000 documents avec le code précédent sur une machine standard.

Notez que le SDK supporte très bien la programmation avec Linq To XML – comme nous le verrons par la suite - qui permet de requêter ou de construire une structure XML très simplement et rapidement. Côté performance, notez qu’il vous faudra moins de 3 secondes pour générer 1000 documents avec le code précédent sur une machine standard.

II. Quelques mots supplémentaires sur le SDK

Le SDK a été conçu pour être mis à disposition en version fonctionnelle successive (l’équipe itère sur l’aspect fonctionnel du SDK plutôt que sur l’amélioration des fonctionnalités existantes) :

  1. Version 1.0 – permet la manipulation directe des documents Open XML au niveau des parties.
  2. Version 2.0 – fournie des classes fortement typées pour manipuler le contenu des parties

Le SDK Open XML v2 permettra aussi de valider des documents Open XML existants ou ceux que vous avez composé. Néanmoins soyez conscient que le modèle objet proposé ici n’est pas un remplaçant du modèle objet d’Office tel qu’on le retrouve dans VSTO, et que vous devez néanmoins connaître la structure générale des fichiers Open XML. Dans la même logique, ce SDK a été conçu uniquement pour manipuler le format Open XML, par conséquent n’espérez pas y trouver de convertisseurs (vers HTML, XPS, doc, etc), ni de validateur si vous manipulez directement le XML sous jacent sans passer par l’API ou encore d’outils fonctionnels (recalcul de feuille Excel, pagination d’un document Word, etc). Cette version est encore en Community Technology Preview et ne pourra être déployé dans des solutions d’entreprise avant le « Go Live » de l’éditeur.

III. Un remplaçant pour Office Automation

La réponse n’est pas tranchée, puisque cela dépendra pour beaucoup du scénario que vous devez reproduire. Néanmoins, une chose est sûre : pour générer ou extraire des données d’un document, Office Automation n’est plus la meilleure solution ! En effet, ceux qui déjà créer des solutions à base d’Office Automation sur un serveur se rappelleront sûrement des recommandations de la KB suivante : http://support.microsoft.com/kb/257757.

Les avantages d’utiliser le SDK Open XML sur un serveur sont nombreux : sécurité, performance, stabilité, montée en charge, etc. Vous pouvez donc maintenant créer des solutions stables et capable de montée en charge dans des environnements multithread/multicore ou répartis. Le fait de ne pas avoir d’instance d’Office vous offrira également toute la mémoire et le la puissance processeur nécessaire pour réaliser vos tâches et uniquement celles-ci. Le rapport de performance entre l’utilisation de Office Automation et le SDK Open XML peut varier de 100 à plus de 1000 fois plus rapide pour le SDK Open XML v2.

Vous l’aurez compris, le SDK Open XML peut sans aucun doute se prévaloir du titre de remplaçant d’Office Automation pour les scénarios de génération, de consommation et de manipulations de fichiers Office.

IV. Ce que n’est pas le SDK Open XML

Cependant attention, le SDK Open XML n’est pas un couteau Suisse multifonction auquel nous pouvons tout demander. Il est donc nécessaire de vous communiquer quelques points où le SDK Open XML n’est pas à l’aise ou tout simplement pas fait pour :

  • Le SDK n’est pas un remplacement du modèle objet d’Office (VBA ou VSTO),
  • Le SDK ne fourni pas une abstraction placée au dessus du format de fichier, vous manipulez le format Open XML, vous devrez donc en connaître les rudiments essentiels pour utiliser le SDK,
  • Le SDK n’est pas un outil pour convertir les formats entre eux (Open XML vers HTML, XPS vers Open XML, etc - à vous de les développer),
  • Le SDK n’est pas capable de valider un document si vous modifiez vous-même le XML des parties sans passer par le modèle objet du SDK (en soit, c’est déjà une excellente chose que vous ayez accès au XML sous-jacent, et cette possibilité est étudié pour les versions futures),
  • Le SDK ne fournie pas d’outils fonctionnels (pagination de documents Word, recalcul des formules dans un document Excel, fusion de présentation PowerPoint, etc).

V. Les outils livrés avec le SDK

Un SDK livré sans outil complémentaire n’en étant pas vraiment un, sachez que cette version du SDK s’accompagne d’une documentation et de plusieurs outils. Leur seul but est d’épauler les développeurs dans leur apprentissage et l’utilisation au jour le jour du SDK. Voici un détail de chaque outil apporté par la version disponible lors de la rédaction de cet article.

OpenXml Diff

Ce premier outil vous permettra de faire la différenciation entre le contenu de deux documents Open XML. Cela a son intérêt lorsque vous générez des documents, si ceux-ci ne s’ouvre pas ou n’affiche pas ce que vous espériez. Il vous suffira alors de les comparer à une version qui s’ouvre, par exemple générer par Office, pour savoir ce que vous devrez modifier dans votre solution de génération de documents Open XML.

image

Le Class Explorer

Cet outil est une documentation à part entière dans lequel vous pourrez chercher les classes et les énumérations proposées par le SDK. En face de chaque classe, vous trouverez la section de la spécification Open XML de l’ECMA ainsi que la documentation MSDN de la classe.

image

Le Document Reflector

Cet outil est la Rolls des outils de ce SDK puisqu’il permettra aussi bien aux débutants qu’aux experts de pouvoir générer le code de génération d’un document complet, que ce soit un document Word, Excel ou PowerPoint. En effet, il vous suffira d’ouvrir un document avec cet outil, et il générera pour vous l’intégralité du code C# utilisant le SDK Open XML v2 pour générer à l’identique le document ainsi ouvert.

En plus de proposer cette fonctionnalité qui devrait augmenter la productivité des développeurs de façon conséquente, cet outil permet aussi de prendre connaissance du XML de chaque partie ou des éléments du document (paragraphe, cellule, diapositive, etc).

image

 

La suite de cet article très rapidement disponible sur mon blog. Bonne lecture !

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 3 août 2009 20:35 par neodante
Classé sous : ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01