Поделиться через


Практическое руководство. Добавление XML-частей в документ без запуска Microsoft Office

Обновлен: Ноябрь 2007

Применение

Сведения, приведенные в данном разделе, относятся только к указанным версиям Microsoft Office.

Версия Microsoft Office

  • Excel 2007

  • PowerPoint 2007

  • Word 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

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

  1. Создайте объект 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);
    
  2. Создайте новый объект 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-частей в настройках уровня документа

Практическое руководство. Добавление пользовательских XML-частей в документы с использованием надстроек уровня приложения

Основные понятия

Общие сведения о пользовательских XML-частях