Condividi tramite


Procedura: aggiungere parti XML personalizzate a documenti senza avviare Microsoft Office

Aggiornamento: novembre 2007

Si applica a

Le informazioni contenute in questo argomento riguardano solo le versioni di Microsoft Office specificate.

Versione Microsoft Office

  • Excel 2007

  • PowerPoint 2007

  • Word 2007

Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazione.

È possibile aggiungere una parte XML personalizzata a un documento senza avviare Microsoft Office Excel, Microsoft Office PowerPoint o Microsoft Office Word. Questa possibilità risulta utile se si intende memorizzare i dati XML in un documento su un computer senza Microsoft Office, ad esempio un server. Per ulteriori informazioni, vedere Cenni preliminari sulle web part XML personalizzate.

Il documento deve essere in uno dei formati Open XML, ad esempio docx, xlsx o pptx. Non è possibile accedere a una parte XML personalizzata in formati di file binari senza avviare l'applicazione di Microsoft Office.

Per aggiungere una parte XML personalizzata senza avviare Microsoft Office, utilizzare le classi Package e PackagePart. Per ulteriori informazioni su queste classi, vedere Documenti di Windows Presentation Foundation.

Per aggiungere una parte XML personalizzata a un documento senza avviare Microsoft Office

  1. Creare un oggetto XmlDocument che rappresenta l'XML che si vuole aggiungere a una parte XML personalizzata.

    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. Creare un nuovo oggetto PackagePart che rappresenta la parte XML personalizzata che si vuole aggiungere al documento. Quindi, salvare l'XML dall'oggetto XmlDocument creato precedentemente nella nuova parte XML personalizzata.

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

Esempio

Nell'esempio di codice seguente viene aggiunta una parte XML personalizzata a un documento di Word denominato Employees.docx presente nella cartella %UserProfile%\Documenti (per Windows XP e versioni precedenti e per Windows Vista).

Questo esempio è stato scritto per essere usato in un'applicazione console, ma è possibile modificarlo per qualsiasi applicazione che utilizzi .NET Framework 3.0 o versioni successive, ad esempio un'applicazione Windows Presentation Foundation (WPF).

Per modificare questo esempio per un documento di Excel o PowerPoint, modificare il metodo Main per passare il percorso completo del documento al metodo 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;
}

Compilazione del codice

  • In questo esempio è richiesto un riferimento all'assembly WindowsBase.dll. Questo assembly è incluso in .NET Framework a partire dalla versione 3.0.

  • In questo esempio si presuppone che le istruzioni using (per C#) o Imports (per Visual Basic) siano disponibili per gli spazi dei nomi seguenti:

    • System.IO

    • System.IO.Packaging

    • System.Xml

Vedere anche

Attività

Procedura: aggiungere web part XML personalizzate a personalizzazioni a livello di documento

Procedura: aggiungere web part XML personalizzate a documenti utilizzando componenti aggiuntivi a livello di applicazione

Concetti

Cenni preliminari sulle web part XML personalizzate