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