Freigeben über


Gewusst wie: Hinzufügen von benutzerdefinierten XML-Abschnitten zu Dokumenten, ohne Microsoft Office zu starten

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Versionen von Microsoft Office.

Microsoft Office-Version

  • Excel 2007

  • PowerPoint 2007

  • Word 2007

Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

Sie können einem Dokument einen benutzerdefinierten XML-Abschnitt hinzufügen, ohne Microsoft Office Excel, Microsoft Office PowerPoint oder Microsoft Office Word zu starten. Dies ist hilfreich, wenn Sie XML-Daten in einem Dokument auf einem Computer ohne installiertes Microsoft Office (z. B. auf einem Server) speichern möchten. Weitere Informationen hierzu finden Sie unter Übersicht über benutzerdefinierte XML-Abschnitte.

Das Dokument muss in einem der Open XML-Formate vorliegen, z. B. .docx, .xlsx oder .pptx. Sie können nicht auf benutzerdefinierte XML-Abschnitte in den binären Dateiformaten zugreifen, ohne die Microsoft Office-Anwendung zu starten.

Um einen benutzerdefinierten XML-Abschnitt ohne Starten von Microsoft Office hinzuzufügen, verwenden Sie die Package-Klasse und die PackagePart-Klasse. Weitere Informationen zu diesen Klassen finden Sie unter Dokumente in Windows Presentation Foundation.

So fügen Sie einem Dokument einen benutzerdefinierten XML-Abschnitt hinzu, ohne Microsoft Office zu starten

  1. Erstellen Sie ein XmlDocument-Objekt, das die XML-Daten darstellt, die Sie einem benutzerdefinierten XML-Abschnitt hinzufügen möchten.

    Dim xmlString As String = _
        "<?xml version=""1.0"" encoding=""utf-8"" ?>" & _
            "<employees https://schemas.microsoft.com/vsto/samples"">" & _
                "<employee>" & _
                    "<name>Karina Leal</name>" & _
                    "<hireDate>1999-04-01</hireDate>" & _
                    "<title>Manager</title>" & _
                "</employee>" & _
            "</employees>"
    
    Dim reader As StringReader = New StringReader(xmlString)
    Dim xmlDoc As XmlDocument = New XmlDocument()
    xmlDoc.Load(reader)
    
    string xmlString =
        "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
        "<employees xmlns=\"https://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. Erstellen Sie einen neuen PackagePart, der den benutzerdefinierten XML-Abschnitt darstellt, den Sie dem Dokument hinzufügen. Speichern Sie dann die XML-Daten des XmlDocument-Objekts, das Sie bereits erstellt haben, in dem neuen benutzerdefinierten XML-Abschnitt.

    Using package As Package = package.Open(fullDocumentPath, FileMode.Open, _
        FileAccess.ReadWrite)
        Dim uriPartTarget As Uri = New Uri("/customXml/employee1.xml", UriKind.Relative)
        If Not package.PartExists(uriPartTarget) Then
            Dim customXml As PackagePart = package.CreatePart(uriPartTarget, _
                "application/vnd.openxmlformats-officedocument.customXmlProperties+xml")
            Using partStream As Stream = customXml.GetStream(FileMode.Create, _
                FileAccess.ReadWrite)
                xmlDoc.Save(partStream)
            End Using
        End If
    End Using
    
    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);
            }
        }
    }
    

Beispiel

Im folgenden Codebeispiel wird einem Word-Dokument mit dem Namen Employees.docx, das sich im Ordner %UserProfile%\My Documents (für Windows XP und frühere Windows-Versionen) bzw. im Ordner %UserProfile%\Documents (für Windows Vista) befindet, ein benutzerdefinierter XML-Abschnitt hinzugefügt.

Dieses Beispiel ist für eine Konsolenanwendung gedacht. Sie können es jedoch so ändern, dass es mit jeder Anwendung funktioniert, die für .NET Framework ab Version 3.0 konzipiert ist, z. B. einer WPF (Windows Presentation Foundation)-Anwendung.

Um das Beispiel so zu ändern, dass es mit einem Excel- oder PowerPoint-Dokument funktioniert, bearbeiten Sie die Main-Methode so, dass sie den vollständigen Pfad zum Dokument an die AddCustomXmlPart-Methode übergibt.

Sub Main()
    AddCustomXmlPart(Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & "\Employees.docx")
End Sub

Private Sub AddCustomXmlPart(ByVal fullDocumentPath As String)
    Dim xmlDoc As XmlDocument = GetXmlDocumentFromString()

    If xmlDoc IsNot Nothing Then
        Using package As Package = package.Open(fullDocumentPath, FileMode.Open, _
            FileAccess.ReadWrite)
            Dim uriPartTarget As Uri = New Uri("/customXml/employee1.xml", UriKind.Relative)
            If Not package.PartExists(uriPartTarget) Then
                Dim customXml As PackagePart = package.CreatePart(uriPartTarget, _
                    "application/vnd.openxmlformats-officedocument.customXmlProperties+xml")
                Using partStream As Stream = customXml.GetStream(FileMode.Create, _
                    FileAccess.ReadWrite)
                    xmlDoc.Save(partStream)
                End Using
            End If
        End Using
    End If
End Sub

Private Function GetXmlDocumentFromString() As XmlDocument
    Dim xmlString As String = _
        "<?xml version=""1.0"" encoding=""utf-8"" ?>" & _
            "<employees https://schemas.microsoft.com/vsto/samples"">" & _
                "<employee>" & _
                    "<name>Karina Leal</name>" & _
                    "<hireDate>1999-04-01</hireDate>" & _
                    "<title>Manager</title>" & _
                "</employee>" & _
            "</employees>"

    Dim reader As StringReader = New StringReader(xmlString)
    Dim xmlDoc As XmlDocument = New XmlDocument()
    xmlDoc.Load(reader)
    Return xmlDoc
End Function
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=\"https://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;
}

Kompilieren des Codes

  • Dieses Beispiel erfordert einen Verweis auf die Assembly WindowsBase.dll. Diese Assembly ist im .NET Framework ab Version 3.0 enthalten.

  • In diesem Beispiel wird angenommen, dass eine using-Anweisung (für C#) bzw. eine Imports-Anweisung (für Visual Basic) für die folgenden Namespaces vorhanden ist:

    • System.IO

    • System.IO.Packaging

    • System.Xml

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen von benutzerdefinierten XML-Abschnitten zu Anpassungen auf Dokumentebene

Gewusst wie: Hinzufügen von benutzerdefinierten XML-Abschnitten zu Dokumenten mithilfe von Add-Ins auf Anwendungsebene

Konzepte

Übersicht über benutzerdefinierte XML-Abschnitte