Comment : ajouter des parties XML personnalisées à des documents sans démarrer Microsoft Office
Mise à jour : novembre 2007
S'applique à |
---|
Les informations de cette rubrique s'appliquent uniquement aux versions spécifiées de Microsoft Office. Version de Microsoft Office
Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet. |
Vous pouvez ajouter une partie XML personnalisée à un document sans démarrer Microsoft Office Excel, Microsoft Office PowerPoint ou Microsoft Office Word. Cela s'avère utile si vous souhaitez stocker les données XML dans un document sur un ordinateur sur lequel Microsoft Office n'est pas installé, tel qu'un serveur. Pour plus d'informations, consultez Vue d'ensemble des parties XML personnalisées.
Le document doit avoir l'un des formats Open XML suivants : .docx, .xlsx ou .pptx. Vous ne pouvez pas accéder aux parties XML personnalisées dans les formats de fichier binaire sans démarrer l'application Microsoft Office.
Pour ajouter une partie XML personnalisée sans démarrer Microsoft Office, utilisez les classes Package et PackagePart. Pour plus d'informations sur ces classes, consultez Documents dans Windows Presentation Foundation.
Pour ajouter une partie XML personnalisée à un document sans démarrer Microsoft Office
Créez un objet XmlDocument qui représente le XML que vous souhaitez ajouter à une partie XML personnalisée.
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);
Créez un nouveau PackagePart qui représente la partie XML personnalisée que vous ajoutez au document. Enregistrez ensuite le XML de l'objet XmlDocument que vous avez créé précédemment dans la nouvelle partie XML personnalisée.
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); } } }
Exemple
L'exemple de code suivant ajoute une partie XML personnalisée à un document Word appelé Employees.docx qui se trouve dans le dossier %UserProfile%\Mes documents (pour Windows XP et antérieur) ou le dossier %UserProfile%\Documents (pour Windows Vista).
Cet exemple est prévu pour être utilisé dans une application console, mais vous pouvez le modifier pour travailler dans toute application fonctionnant avec le .NET Framework 3.0 ou version ultérieure, telle qu'une application Windows Presentation Foundation (WPF).
Pour modifier cet exemple pour travailler avec un document Excel ou PowerPoint, modifiez la méthode Main afin de transférer le chemin d'accès complet du document à la méthode 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;
}
Compilation du code
Cet exemple nécessite une référence à l'assembly WindowsBase.dll. Cet assembly est inclus dans le .NET Framework, à partir de la version 3.0.
Cet exemple suppose que vous avez des instructions using (pour C#) ou Imports (pour Visual Basic) pour les espaces de noms suivants :
System.IO
System.IO.Packaging
System.Xml
Voir aussi
Tâches
Comment : ajouter des parties XML personnalisées aux personnalisations au niveau du document