Como: Adicionar partes XML personalizado para documentos sem iniciar o Microsoft Office

Você pode adicionar um componente XML personalizado a um documento sem iniciar o Microsoft Office Excel, PowerPoint de Microsoft Office ou Microsoft Office Word. Isso é útil se você deseja armazenar os dados XML em um documento em um computador que não tenha instalado, como, por exemplo, um servidor de de Microsoft Office. For more information, see Visão geral de partes XML personalizada.

Aplicável a: As informações neste tópico se aplicam aos seguintes aplicativos: Excel 2007 e Excel 2010; PowerPoint 2007 e PowerPoint 2010; Word 2007 e Word 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

O documento deve estar em um dos formatos XML abertos do, como, por exemplo,. docx,. xlsx ou. pptx. Você não pode acessar partes XML nos formatos de arquivo binário sem iniciar o aplicativo Microsoft Office.

Para adicionar um componente XML personalizado sem iniciar o Microsoft Office, use o Package e PackagePart classes. For more information about these classes, see Documentos no WPF.

Para adicionar um componente XML personalizado a um documento sem iniciar o Microsoft Office

  1. Criar um XmlDocument objeto que representa o XML que você deseja adicionar a um part. XML personalizado

    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. Criar uma nova PackagePart que representa a parte XML personalizada que você está adicionando ao documento. Em seguida, salve o XML a partir de XmlDocument objeto criado anteriormente para o novo part. XML personalizado

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

Exemplo

O exemplo de código a seguir adiciona um componente XML personalizado a um documento do Word chamado Employees.docx que está localizado na pasta %USERPROFILE%\Meus documentos (para Windows XP e versões anteriores) ou na pasta de %UserProfile%\Documents (para Windows Vista).

Este exemplo se destina a ser usado em um aplicativo de console, mas você pode modificá-lo para trabalhar em qualquer aplicativo que funciona com o.NET Framework 3.0 ou posterior, como, por exemplo, um aplicativo de Windows Presentation Foundation (WPF).

Para modificar este exemplo funcione com um documento do Excel ou PowerPoint, modifique o Main método para passar o caminho completo do documento para o AddCustomXmlPart método.

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

Compilando o código

  • Este exemplo requer uma referência ao assembly WindowsBase. dll. Esse assembly está incluído na.NET Framework, começando com a versão 3.0.

  • Este exemplo pressupõe que você tenha using (para C#) ou Imports (para Visual Basic) instruções para os namespaces a seguir:

    • System.IO

    • System.IO.Packaging

    • System.Xml

Consulte também

Tarefas

Como: Adicionar partes XML personalizado para personalizações em nível de documento

Como: Adicionar partes XML personalizado aos documentos usando suplementos de nível de aplicativo

Conceitos

Visão geral de partes XML personalizada