Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Modification d'un document .dotx via OpenXML [ Divers / Autre ] (stefantastiq)

jeudi 29 mai 2008 à 18:08:22 | Modification d'un document .dotx via OpenXML

stefantastiq

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 .

vendredi 30 mai 2008 à 12:04:47 | Re : Modification d'un document .dotx via OpenXML

stefantastiq

Réponse acceptée !
J'ai trouver ma solution! J'ai intégré des sortes de balises ou repères textuels dans mon texte via word 2007 par exemple :  [RS]
Puis j'utilise ce code :

    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)
    {
       //chemin du document word
        string docWord = @"C:\test5.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());
           
            if (doc.DocumentElement.InnerText.Contains("[RS]"))
            {
                //chaine temporaire où est stockée la nouvelle valeur
                string tmp2 = doc.InnerXml.Replace("[RS]", " Raison Sociale");
                doc.InnerXml = tmp2; // on affecte avec la nouvelle valeur !
            }
            //on sauvegarde
            doc.Save(mainPart.GetStream(FileMode.Open, FileAccess.ReadWrite));
        }
        //fermeture du package
        officePackage.Close();
    }
}


Ce code cherche si la chaien de caractère existe [RS] et si oui la remplace par  Raison Sociale.
Après reste plus qu'à l'adapter aux besoins    !!!



Cette discussion est classé dans : web, system, doc, using, ui


Répondre à ce message

Sujets en rapport avec ce message

Pb de datagrid->pour faire un panier ASP.net C# [ par fabrice83 ] fab83je suis en BTS est mon projet est de réaliser un site de vente g un pb avec mon panier .Voici mon code j'ai une datgrid1qui represente mon catal SQL SERVER [ par rabbiwan ] bonjourj'ai un petit problème de connexionj'arrive a me connecter sur mon server avec un petit programme que vous pouvez trouver a http://www.aspfr.co Erreur insoluble pour moi ASP.NET2.0 [ par Tukkkko ] Bonjour, j'ai une erreur insolutble pour moiVoici le code:using System;using System.Data;<font co Evenement asp .net c# avec WebUserControl [ par HolyNoodle ] Bonjour,J'ai un problème qui me pose pas mal de sushi...Je suis en asp .net/c#Bon je vous donne le code :[code]namespace WebApplication1.WebUserContro afficher le résultat d'une requête aprés connection OLEDB [ par javato ] Bonjour,J'ai réalisé une connectiojn OLEDB à une base Oracle et je voudrais savoir comment je peux afficher le résutat d'une requête SQL.<br NVelocity & Hashtable [ par Nawalll ] Bonsoir tout le mondej'ai une classe c# qui recupère des informations à partir d'un formulaire, les stocke dans un Hashtable et puis utilise velocity Impression d'un System.Web.UI.Webcontrols.Table [ par fdecandido ] Bonjour,Je suis debutant en .net et developpe en c#.Je dois faire un moteur de resa hotel en ligne.L'utilisateur saisie un certain nombre de param cho AutoCompletion ASP.NET 2.0 [ par yanis7518 ] Salut a tousJe souhaite créer une zone d'autoCompletion (aide à la saisie). Pour cela j'utilise une textbox et le control AutoCompleteExtender. J'ai c Double appel Page_Init avec un controle ImageButton ou Image [ par guilhemberthalon ] Bonjour,j'ai un problème plutôt bizarre avec les contrôles ImageButton et Image,Lorque j'ajoute un de ces contrôles dans une page aspx, la page est ch Pb de connexion Access [ par tilleuls ] (Je suis en train d'apprendre à porter mes applications base de données Access sous ASP.NET). J'utilise pour commencer des outils gratuits (Visual Web


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.