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
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
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);
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