Aracılığıyla paylaş


Nasıl Yapılır: Microsoft Office'i Başlatmadan Belgelere Özel XML Bölümleri Ekleme

Microsoft Office Excel, Microsoft Office PowerPoint ya da Microsoft Office Word'ü başlatmadan belgelere özel XML bölümü ekleyebilirsiniz. Sunucu gibi, Microsoft Office yüklü olmayan bir bilgisayarın bir belgesindeki XML verisini saklamak isterseniz bu yöntem yararlıdır. Daha fazla bilgi için bkz. Özel XML Bölümlerine Genel Bakış.

Uygulama alanı: Bu konudaki bilgiler şu uygulamalara yöneliktir: Excel 2007 ve Excel 2010; PowerPoint 2007 ve PowerPoint 2010; Word 2007 ve Word 2010. Daha fazla bilgi için bkz. Office Uygulamalarında Kullanılabilir Özellikler ve Proje Türü.

Belge .docx, .xlsx, .pptx gibi Open XML Format'larından birinde olmalıdır. Microsoft Office uygulamasını başlatmadan ikili dosya biçimlerindeki özel XML bölümlerine erişemezsiniz.

Microsoft Office'i başlatmadan özel XML parçaları eklemek için Package ve PackagePart sınıflarını kullanın. Bu sınıflar hakkında daha fazla bilgi için bkz. WPF'deki Belgeler.

Microsoft Office'i başlatmadan belgelere özel XML bölümleri eklemek için

  1. Özel XML bölümüne eklemek istediğiniz XML'i temsil eden bir XmlDocument nesnesi oluşturun.

    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. Belgeye ekleyeceğiniz özel XML bölümünü temsil eden yeni bir PackagePart oluşturun. Yaratmış olduğunuz XmlDocument nesnesindeki XML'i, yeni özel XML bölümüne kaydedin.

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

Örnek

Aşağıdaki kod örneğinde %UserProfile%\My Documents klasöründe (Windows XP için) veya %UserProfile%\Documents (Windows Vista için) klasöründe bulunan Employees.docx adındaki Word belgesine özel bir XML bölümü eklenir.

Bu örnek bir konsol uygulamasında kullanılmak üzere tasarlanmıştır, ancak bu örneği .NET Framework 3.0 veya daha sonrasında çalışan Windows Presentation Foundation (WPF) uygulamaları gibi bütün uygulamalarda çalışacak şekilde değiştirebilirsiniz.

Bu örneği Excel veya PowerPoint belgeleriyle çalışacak şekilde değiştirmek için Main yöntemini belgenin tam yolunu AddCustomXmlPart yöntemine geçirecek biçimde değiştirin.

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

Kodu Derleme

  • Bu örnek WindowsBase.dll derlemesine bir başvuru olmasını gerektirir. Bu derleme .NET Framework'e 3.0 sürümünden itibaren dahil edilmiştir.

  • Bu örnekte aşağıdaki isim uzayları için (C#'ta) using veya (Visual Basic'te) Imports ifadesinin olduğu varsayılır.

    • System.IO

    • System.IO.Packaging

    • System.Xml

Ayrıca bkz.

Görevler

Nasıl Yapılır: Özel xml bölümleri belge düzeyinde özelleştirmeler ekleme

Nasıl Yapılır: Özel XML Bölümlerini Uygulama Düzeyi Eklentilerini Kullanarak Belgelere Ekleme

Kavramlar

Özel XML Bölümlerine Genel Bakış