Modifier le contenu d'un word avec OpenXML
Salut tout le monde !
J'essaie de suivre un tuto du labo microsoft mais j'ai un problème...
Le but de ce tuto est d'écrire dans des "contenu" word via du code c#.
J'ai donc ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
FileStream fs = null;
Package pckg = null;
//Ouvre le fichier
Stream stmTemplate = new FileStream("C:\\test\\test.docx", FileMode.Open);
BinaryReader brTemplate = new BinaryReader(stmTemplate);
//Créé nouveau template
Stream stmWrite = File.Create("C:\\test\\test2.docx");
BinaryWriter bwDocument = new BinaryWriter(stmWrite);
bwDocument.Write(brTemplate.ReadBytes((int)stmTemplate.Length));
//ferme des documents
bwDocument.Flush();
bwDocument.Close();
brTemplate.Close();
stmWrite.Close();
//chargement du docx
fs = File.Open("C:\\test\\test2.docx", FileMode.Open, FileAccess.ReadWrite);
pckg = Package.Open(fs, FileMode.Open, FileAccess.ReadWrite); //accès en lecture/écriture
ModifyCustomXML(pckg); |
et
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
protected void ModifyCustomXML(Package pckg)
{
//fichier qui contient la partie personnalisable cela peut changer en fonction des fichiers
Uri customXmlUri = new Uri("/customXml/item1.xml", UriKind.Relative);
//Permet de récupérer cette part
PackagePart customXmlPart = pckg.GetPart(customXmlUri);
//on charge le document dans un document linq
XDocument xmldoc = XDocument.Load(XmlReader.Create(new StreamReader(customXmlPart.GetStream())));
//on parcourt le xml pour mettre les éléments
foreach (XElement item in xmldoc.Descendants())
{
switch (item.Name.LocalName)
{
//premier champ
case "myName":
item.Value = "monnom";
break;
case "myPrenom":
item.Value = "monprenom";
break;
}
}
//on remet le pointeur au début
customXmlPart.GetStream().Seek(0, SeekOrigin.Begin);
//met le document XML dans le XMLWriter pour l'écriture après
XmlWriter xmlwriter = XmlWriter.Create(customXmlPart.GetStream());
//ecriture du fichier xml
xmldoc.WriteTo(xmlwriter);
//on ferme les fichiers
xmlwriter.Flush();
xmlwriter.Close();
} |
Cela modifie bien les zones "contenu" du document word, par contre lorsque j'ouvre mon document avec word, je ne vois pas mon contenu apparaître...!
Des idées...?
Merci !