Практическое руководство. Добавление XML-частей в документ без запуска Microsoft Office
Обновлен: Ноябрь 2007
Применение |
---|
Сведения, приведенные в данном разделе, относятся только к указанным версиям Microsoft Office. Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
XML-часть можно добавить к документу без запуска Microsoft Office Excel, Microsoft Office PowerPoint или Microsoft Office Word. Это полезно в том случае, когда требуется сохранить XML-данные в документе на компьютере, где не установлен Microsoft Office, например, на сервере. Дополнительные сведения см. в разделе Общие сведения о пользовательских XML-частях.
Документ должен находиться в одном из форматов Open XML, например DOCX, XLSX или PPTX. Обращаться к настраиваемым XML-частям в файлах бинарных форматов без запуска приложения Microsoft Office нельзя.
Чтобы добавить настраиваемую XML-часть без запуска Microsoft Office, следует использовать классы Package и PackagePart. Дополнительные сведения об этих классах см. в разделе Документы в Windows Presentation Foundation.
Добавление настраиваемых XML-частей в документ без запуска Microsoft Office
Создайте объект XmlDocument, представляющий XML-текст, который требуется добавить в настраиваемую XML-часть.
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);
Создайте новый объект PackagePart, представляющий настраиваемую XML-часть, которую требуется добавить в документ. Затем сохраните XML-текст из созданного ранее объекта XmlDocument в новой настраиваемой XML-части.
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); } } }
Пример
В данном примере кода настраиваемая XML-часть добавляется в документ Word с именем Employees.docx, расположенный в папке %UserProfile%\Мои документы (для Windows XP и более ранних версий) либо в папке %UserProfile%\Документы (для Windows Vista).
Данный пример рекомендуется использовать в консольном приложении, но можно изменить его таким образом, чтобы он работал в любом приложении, выполняющемся на базе платформы .NET Framework версии 3.0 или более поздней, например, в приложении Windows Presentation Foundation (WPF).
Чтобы изменить данный пример для работы в документе Excel или PowerPoint, следует изменить метод Main таким образом, чтобы он передавал полный путь документа методу AddCustomXmlPart.
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;
}
Компиляция кода
Для этого примера требуется ссылка на сборку WindowsBase.dll. Данная сборка включена в состав платформы .NET Framework, начиная с версии 3.0.
В данном примере предполагается, что операторы using (в Visual Basic) или Imports (в C#) использованы для указанных ниже пространств имен:
System.IO
System.IO.Packaging
System.Xml
См. также
Задачи
Практическое руководство. Добавление пользовательских XML-частей в настройках уровня документа