Comment : ajouter des parties XML personnalisées à des documents sans démarrer Microsoft Office

Mise à jour : novembre 2007

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux versions spécifiées de Microsoft Office.

Version de Microsoft Office

  • Excel 2007

  • PowerPoint 2007

  • Word 2007

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Vous pouvez ajouter une partie XML personnalisée à un document sans démarrer Microsoft Office Excel, Microsoft Office PowerPoint ou Microsoft Office Word. Cela s'avère utile si vous souhaitez stocker les données XML dans un document sur un ordinateur sur lequel Microsoft Office n'est pas installé, tel qu'un serveur. Pour plus d'informations, consultez Vue d'ensemble des parties XML personnalisées.

Le document doit avoir l'un des formats Open XML suivants : .docx, .xlsx ou .pptx. Vous ne pouvez pas accéder aux parties XML personnalisées dans les formats de fichier binaire sans démarrer l'application Microsoft Office.

Pour ajouter une partie XML personnalisée sans démarrer Microsoft Office, utilisez les classes Package et PackagePart. Pour plus d'informations sur ces classes, consultez Documents dans Windows Presentation Foundation.

Pour ajouter une partie XML personnalisée à un document sans démarrer Microsoft Office

  1. Créez un objet XmlDocument qui représente le XML que vous souhaitez ajouter à une partie XML personnalisée.

    string xmlString =
        "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
        "<employees xmlns=\"http://schemas.microsoft.com/vsto/samples\">" +
            "<employee>" +
                "<name>Karina Leal</name>" +
                "<hireDate>1999-04-01</hireDate>" +
                "<title>Manager</title>" +
            "</employee>" +
        "</employees>";
    
    StringReader reader = new StringReader(xmlString);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(reader);
    
    
    
  2. Créez un nouveau PackagePart qui représente la partie XML personnalisée que vous ajoutez au document. Enregistrez ensuite le XML de l'objet XmlDocument que vous avez créé précédemment dans la nouvelle partie XML personnalisée.

    using (Package package = Package.Open(fullDocumentPath, FileMode.Open,
        FileAccess.ReadWrite))
    {
        Uri uriPartTarget = new Uri("/customXml/employee1.xml", UriKind.Relative);
    
        if (!package.PartExists(uriPartTarget))
        {
            PackagePart customXml = package.CreatePart(uriPartTarget,
                "application/vnd.openxmlformats-officedocument.customXmlProperties+xml");
    
            using (Stream partStream = customXml.GetStream(FileMode.Create,
                FileAccess.ReadWrite))
            {
                xmlDoc.Save(partStream);
            }
        }
    }
    
    
    

L'exemple de code suivant ajoute une partie XML personnalisée à un document Word appelé Employees.docx qui se trouve dans le dossier %UserProfile%\Mes documents (pour Windows XP et antérieur) ou le dossier %UserProfile%\Documents (pour Windows Vista).

Cet exemple est prévu pour être utilisé dans une application console, mais vous pouvez le modifier pour travailler dans toute application fonctionnant avec le .NET Framework 3.0 ou version ultérieure, telle qu'une application Windows Presentation Foundation (WPF).

Pour modifier cet exemple pour travailler avec un document Excel ou PowerPoint, modifiez la méthode Main afin de transférer le chemin d'accès complet du document à la méthode AddCustomXmlPart.

static void Main(string[] args)
{
    AddCustomXmlPart(Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) + @"\Employees.docx");
}

private static void AddCustomXmlPart(string fullDocumentPath)
{
    XmlDocument xmlDoc = GetXmlDocumentFromString();

    if (xmlDoc != null)
    {
        using (Package package = Package.Open(fullDocumentPath, FileMode.Open,
            FileAccess.ReadWrite))
        {
            Uri uriPartTarget = new Uri("/customXml/employee1.xml", UriKind.Relative);

            if (!package.PartExists(uriPartTarget))
            {
                PackagePart customXml = package.CreatePart(uriPartTarget,
                    "application/vnd.openxmlformats-officedocument.customXmlProperties+xml");

                using (Stream partStream = customXml.GetStream(FileMode.Create,
                    FileAccess.ReadWrite))
                {
                    xmlDoc.Save(partStream);
                }
            }
        }
    }
}

private static XmlDocument GetXmlDocumentFromString()
{
    string xmlString =
        "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
        "<employees xmlns=\"http://schemas.microsoft.com/vsto/samples\">" +
            "<employee>" +
                "<name>Karina Leal</name>" +
                "<hireDate>1999-04-01</hireDate>" +
                "<title>Manager</title>" +
            "</employee>" +
        "</employees>";

    StringReader reader = new StringReader(xmlString);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(reader);
    return xmlDoc;
}


  • Cet exemple nécessite une référence à l'assembly WindowsBase.dll. Cet assembly est inclus dans le .NET Framework, à partir de la version 3.0.

  • Cet exemple suppose que vous avez des instructions using (pour C#) ou Imports (pour Visual Basic) pour les espaces de noms suivants :

    • System.IO

    • System.IO.Packaging

    • System.Xml

Ajouts de la communauté

Afficher: