Bonjour,
Mon but est de créer un document word à partir d'un modèle word 2007 existant via OpenXML par exemple.
J'ai un petit bout de code qui m'ouvre un flux sur le document voulu et me permet normalement de le modifier.
Seulement le hic est la comment le modifier de manière à insérer un texte voulu à un endroit voulu soit en remplaçant des balises (qui seraient representées par des mots clés) soit en utilisant les signets. un peu le mode opératoire du publipostage.
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Xml;
using System.IO.Packaging;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string docWord = @"C:\test.docx";
//overture du package en lecture/écriture
Package officePackage = Package.Open(docWord, FileMode.Open, FileAccess.ReadWrite);
//type de contenu pour la partie principale
const String officeDocRelType = @"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
PackagePart mainPart = null;
Uri documentUri = null;
//on récupère la partie contenant les propriétés
foreach (PackageRelationship relationship in officePackage.GetRelationshipsByType(officeDocRelType))
{
documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
mainPart = officePackage.GetPart(documentUri);
break;
}
if (mainPart != null)
{
//chargement de la partie dans un XmlDocument
XmlDocument doc = new XmlDocument();
doc.Load(mainPart.GetStream());
// string tmp2 = doc.GetElementById("idnode").InnerText;
if (doc.DocumentElement.InnerText.Contains("[RS]"))
{
string tmp = doc.DocumentElement.InnerText.Replace("[RS]", "evolution_multimedia");
doc.DocumentElement.InnerText = tmp;
}
doc.Save(mainPart.GetStream(FileMode.Open, FileAccess.ReadWrite));
}
//fermeture du package
officePackage.Close();
}
}
Merci d'avance pour votre aide .