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