IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Word add-in package


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut Word add-in package
    Bonjour,

    J'ai crée un .dot et un add-in, j'ai crée un CustomXmlpart que j'ai mappé sur le formulaire de mon .dot.

    Ensuite j'ai un bouton qui add un autre customXMLpart (dans mon add-in qui map sur rien). Je voudrais savoir comment récupérer le customXmlpart lorsque je réouvre mon document. C'est un ACTIVEDOCUMENT, donc pas moyen d'utiliser Package.

    J'ai essayer d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     toto = Globals.ThisAddIn.Application.Selection.WordOpenXML;
    Cela me renvoi que le répertoire "exemple.dot/word/" donc je ne peux pas accéder au répertoire "exemple.dot/customXml" et/ou "exemple.dot/docProps".

    Comment puis je récupéré l'id de ce CustomXmlParts????


    Je vais essayer d'utiliser Property document (développeur/panneau de configuration) à la place d'un customXMLpart, est ce que quelqu'un a une idée si on peux faire un overload??? Ou changer les champs ou autres??

    Le but est d'insérées des informations remplis à partir de mon add-ins dans un document word (dans le package et non dans la page !)


    Si vous avez d'autre idée n'hésiter à partager

    Merci

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Tu n'as pas une propriété CustomXMLParts sur ton document Word ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    Euh la propriete !? C'est à dire
    string XmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    "<FormationPanel>" +
    "<TypeFormation>Formationcontinue</TypeFormation>"+
    "</FormationPanel>";

    try
    {
    Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
    Microsoft.Office.Core.CustomXMLPart test = doc.CustomXMLParts.Add(String.Empty, new Microsoft.Office.Core.CustomXMLSchemaCollectionClass());
    test.LoadXML(XmlStr);
    }

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    La propriété sur laquelle tu fais un Add. C'est une collection non ? Tu ne peux pas itérer dessus pour retrouver ton CustomXmlpart ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    On peux récupérer la classe du document Word :
    Globals.ThisAddIn.Application.ActiveDocument.CustomXMLParts.SelectById
    Il n'y a rien pour recuperer l'id qui est du type :
    {1D47F10D-207E-443C-9315-87EFCBEF2FC0}
    La clef est généré automatiquement on a pas la main dessus.... Et je ne sais pas ou le récupérer(quel classe/methode). Ou si c'est possible!
    Une fois que j'aurais récupéré la clef je pourrais charger ce XML dans mon add-ins pour changer les informations.

    Je vais essayer de faire une copie du document puis l'ouvrir avec package, c'est le seul moyen je pense .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Par défaut
    Si ça peux aider quelqu'un !

    J'ai crée une méthode pour récupéré l'id du customxmlparts !!! Cette méthode est barbare donc si vous avez des idées pour faire autrement je suis preneur xD. Il ne faut pas que le document soit trop gros !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
       public static string GetKeyCustomXmlPart()
            {
                try
                {
                    string PathCopy = @"C:\TOTO";
                    Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
                    object d = "";
                    //doc.Unprotect(ref d);
                    doc.SaveAsQuickStyleSet(PathCopy);
     
                    int Flag = 0;
                    Uri uritarget;
                    using (Package packageword = Package.Open(@"C:\TOTO.dotx", FileMode.Open, FileAccess.ReadWrite))
                    {
                        for (int i = 1; true; i++)
                        {
                            if (Flag != 1)
                                uritarget = new Uri("/customXml/item" + i.ToString() + ".xml", UriKind.Relative);
                            else
                                uritarget = new Uri("/customXml/itemProps" + (i - 1).ToString() + ".xml", UriKind.Relative);
     
                            if (packageword.PartExists(uritarget))
                            {
                                IEnumerator<PackagePart> relEnum = packageword.GetParts().GetEnumerator();
                                relEnum.MoveNext();
                                PackagePart sd = packageword.GetPart(uritarget);
                                XmlDocument mainDoc = new XmlDocument();
                                mainDoc.Load(sd.GetStream());
                                if (Flag == 1)
                                {
                                    packageword.Flush();
                                    packageword.Close();
                                    File.Delete(@"C:\TOTO.dotx");
                                    return mainDoc["ds:datastoreItem"].Attributes.Item(0).Value;
                                }
    /* il faut definir votre xmlns="info" ou autre*/
                                else if (mainDoc.FirstChild.Attributes.Item(0).Value.Equals("info")) 
                                    Flag = 1;
                            }
                            else
                                break;
                        }
                        packageword.Flush();
                        packageword.Close();
                        File.Delete(@"C:\TOTO.dotx");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error :" + ex.TargetSite.Name + "\n" + ex.Message);
                }
                return String.Empty;
            }
     
     
         public static void AddCustomXMLPart()
            {
                string CustomXmlStr = "<exemple xmlns='info'></exemple>";
                if (!CustomXmlKey.Equals(String.Empty))
                    DelCustomXMLPart();
                try
                {
                    Microsoft.Office.Interop.Word.Document ActiveDocument = Globals.ThisAddIn.Application.ActiveDocument;
                    Microsoft.Office.Core.CustomXMLPart CustomXml = ActiveDocument.CustomXMLParts.Add(String.Empty, new Microsoft.Office.Core.CustomXMLSchemaCollectionClass());
                    CustomXml.LoadXML(CustomXmlStr);
                    CustomXmlKey = CustomXml.Id;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error :" + ex.TargetSite.Name + "\n" + ex.Message);
                }
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Installation d'un word Add-in en utilisant un script
    Par heycko_jv dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 16/04/2014, 20h26
  2. Réponses: 4
    Dernier message: 28/07/2006, 13h10
  3. Réponses: 2
    Dernier message: 21/07/2006, 18h05
  4. [C#][Add-in Word] Focus sur un document precis
    Par Bobarctor dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/04/2006, 07h31
  5. comment créer un add-in pour Word 2000 - XP2003 ???
    Par gide_x dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 13/11/2005, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo