begin process at 2012 05 28 02:44:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP / ASP3

 > 

Divers

 > 

Autre

 > 

Modification d'un document .dotx via OpenXML


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modification d'un document .dotx via OpenXML

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    !!!
mardi 3 février 2009 à 22:49:09 | Re : Modification d'un document .dotx via OpenXML

olivier941

Salut,
juste une remarque :
si ta balise [RS] est mise en forme dans Word (gras, couleur, ...)
ca ne marchera pas .

... et j'ai pas de solution :-(

@+
Olivier
mardi 3 février 2009 à 23:08:07 | Re : Modification d'un document .dotx via OpenXML

olivier941

... heu si ca marche

désolé !

mercredi 4 février 2009 à 09:24:05 | Re : Modification d'un document .dotx via OpenXML

stefantastiq

Bonjour, alors en fait le post datant un peu j'ai finis par trouver une autre solution beaucoup plus propre en passsant par les objets appelés signets. Si tu as besoin de plus d'explication post ici ou contacte moi.mais  merci quand même !
mercredi 4 février 2009 à 09:27:58 | Re : Modification d'un document .dotx via OpenXML

olivier941

Salut,

oui je suis super interesé
est-ce que t'as un exemple comme le tiens ?

merci à toi
jeudi 5 février 2009 à 11:15:49 | Re : Modification d'un document .dotx via OpenXML

stefantastiq

Re, donc j'ai recherché mon vieux projet et je te met quelques brides commentées qui pourrant te servir.
Au préalable, tu dois disposr, d'un fichier word dans lequel tu aura insérer des signets que tu aura nommé comme tu le souhaite.
sinon je reste par la si plus de question.



_Application myWord;              // declaration word
private object myWhat = WdGoToItem.wdGoToBookmark;
private object mySignet;   // variable contenant le signet


#region configuration WORD
myWord = new ApplicationClass();
myWord.DisplayAlerts = WdAlertLevel.wdAlertsNone;
myWord.Visible = false;
#endregion

#region ouverture du Modele word
myDotPath = "c:\\Lettre_fact.dot";  // Renseigne le chemin du fichier word
myWord.Documents.Add(ref myDotPath, ref nullObj, ref nullObj, ref nullObj);   // on met le doc dans notre objet word

#region remplacement numero de facture
mySignet = "NumFacture";      //on affecte notre objet signet avec son nom
myWord.Selection.GoTo(ref myWhat, ref nullObj, ref nullObj, ref mySignet);      //on deplace le curseur jusqu'au signet précédent
myWord.Selection.TypeText("mon texte");      // on ecrit le texte
#endregion

En éspérant avoir pu t'aider
jeudi 5 février 2009 à 11:36:47 | Re : Modification d'un document .dotx via OpenXML

olivier941

merci

par contre, chaque signet doit avoir un nom unique dans le document word ?

si tu voulais placer a deux endroit la meme valeur tu dois donc utiliser deux signets différents ?
"NumFacture1" et "NumFacture2"


jeudi 5 février 2009 à 11:58:49 | Re : Modification d'un document .dotx via OpenXML

stefantastiq

oui exact un nom unique pour chaque signet.A moins que comme ça a été mon cas, tu ais à ecrire tes factures à la suite par exmple : "Voici les factures suivantes n° 12541, 145857" la tu peux concaténer tes chaines et mettre la résultant dans ton signet.
jeudi 2 février 2012 à 08:46:37 | Re : Modification d'un document .dotx via OpenXML

billalch

bonjour stefantastiq et merci pour votre codes qui ma aider énormement je voudrais just dire que j'ai pas arrivé a faire ecxecuter le deuxieme code de signet priére de m'expliquer un peut car je suis débutant en c# asp merci

1 2

Cette discussion est classée 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 utiliser une dll avec vs2005 pour un site web [ par camala19 ] BonjourJ'ai créé une dll en C# à l'aide d'une bibliothèque de classes sous vs2005. Je l'ai intégrée dans mon répertoire bin de mon site web.J'ai toujo connection mysql asp.net C# [ par polo86 ] salut, Je réalise un projet (site web) sous visual studio 2008 avec une db mysql. J'ai donc installé le connector 5.2 de mysql, j'ai ajouté la db à l' dropdownlist + alert javascript sous firefox => problème [ par gr54 ] Bonjour à tous, J'ai développé une appli asp.net et c# (3.5) qui utilise une dropdownlist, le tout en ajax via un updatepanel. Dans certains cas, j'a Erreur du serveur dans l'application '/' + Echec du chargement de l'état. [ par khayour ] bonjour,j'ai une application web pour la gestion du personnel, elle a été developpée par des stagiaires qui étaient là avant moi.le probléme et que lo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales