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

VB.NET Discussion :

Plantage Word OLE Automation


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Plantage Word OLE Automation
    Salut à tous,

    Voici mon problème : j'ai développé une appli assez importante en vb.net dont le but est de produire un doc Word en ole automation.

    L'appli procède par insertion de doc les uns dans les autres suivant une logique bien établie. Le document final est généralement la compilation d'une 60taine de doc plus petits.

    Mon problème est que PARFOIS word plante en me balançant le classique message "Word a rencontré un problème et doit fermer..... blablalblllaa".
    Il ne s'agit pas d'un problème de données, puisque dans le même contexte, parfois ça passe!! En relançant la machine, le problème est généralement résolu.... jusque là fois suivante !
    J'ai le sentiment qu'au bout d'un certain temps, Word n'est plus capable de gérer le flux de commandes ole et se ratatine...

    La mémoire ne semble pas être en cause.

    Problème reproduit sous Office Xp et Office 2007.
    J'aimerais avoir votre avis sur la question.
    Toute piste sera la bienvenue...... car je sèche depuis pas mal de temps sur la question

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Montre-nous et explique-nous ton code : Comment et combien de fois ouvres-tu Word, un fichier ? Comment fais-tu cette "compilation" ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Montre-nous et explique-nous ton code : Comment et combien de fois ouvres-tu Word, un fichier ? Comment fais-tu cette "compilation" ?
    En fait le document final est composé de X documents intermédiaires, et le lien entre ces documents est défini par l'utilisation de signets. La quantité de documents à assembler n'est pas connue à l'avance.

    En gros la logique est la suivante :
    1> Ouverture d'un document .doc maitre, et recherche de signets.
    2> Ouverture des documents .doc ciblés par ces signets qui peuvent eux même contenir des signets... pointant vers d'autres documents, etc...
    ... (process récursif donc)
    3> Une fois que mon graphe de dépendance entre ces différents fichiers est établi, je pars des branches le plus profondes et insère les doc les uns dans les autres jusqu'à remonter au doc maitre initial.
    Et me voilà donc avec un bon gros doc d'une 50taine de pages, qui peut être l'assemblage de 50/60 doc.

    Techniquement, et pour répondre à tes questions :

    - Chaque passage dans la procédure récursive d'inspection des .doc crée une session Word. Vu la "tronche" de mon graphe, je peux donc avoir jusque 4 ou 5 sessions Word tournant simultanément. Pour gérer mes sessions Word j'utilise une classe maison qui s'assure de la bonne suppression des instances Word. Pas de problème donc ce côté là.

    - La plantage ("Word n'a pas pu appliquer l'évènement") intervient sur la ligne suivante :

    Dim doc As Word.Document = manObjWord.ObjWord.Documents.Open(workingFile)

    manObjWord.ObjWord étant un Word.application

    - Sinon pour la compilation, je procède par "insertion" Word : wd.Selection.InsertFile(fileToInsert, Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False)
    Mais mes problèmes interviennent bien avant cette étape.

    Ma session Word n'est pas visible. Quand je la rend visible, j'ai parfois le message "Mémoire insuffisante. Enregistrer votre document immédiatement !".
    J'ai tout ce qu'il faut en mémoire..... Moi pas comprendre ce message !

    BREF, aucune constance dans les plantages, plus ou moins de succès suivant les machines, etc... je sais pas trop par où commencer les recherches.

  4. #4
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Je ne sais pas si cela peut t'aider, mais j'ai fait il y a quelques temps une application VBA VISIO qui fait appel à Word pour sauvegarder les dessins créés.
    J'ai eu le même genre de problèmes, et ça c'est rudement amélioré quand j'ai purgé systématiquement le presse papier après chaque copier/coller de Vision vers Word.
    Cependant ça se plante encore de temps à autre sans raison particulière (il me semble que le fait d'avoir un Word déjà ouvert quand je lance mon aplli n'améliore pas les choses), mais par exemple, pour un même traitement d'une 50taine de schémas, tout peut bien se passer ou alors ça se plante au bout du 2 ou 3eme schéma... un arrêt relance de l'appli et ça remarche...

    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse sibama.
    En fait je n'ai fait aucun copier/coller mais procède par insertion de fichiers.
    D'accord avec toi sur le fait que redémarrer l'appli résout généralement le problème.
    Mais j'ai le (désagréable) sentiment que les plantages vont en augmentant !
    Je continue mes investigations.......

  6. #6
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Je vais te faire une réponse a la noix, mais a prendre en compte quand même....

    Après pas mal de bidouilles dans le même genre, j'ai jeté violemment tout ce qui est automation de word...

    Parce que:
    - plantages aleatoires
    - problemes de liberation de memoire
    - problemes de multi-threading
    - impossibilite dans certains cas, de tuer le process word...
    ....et autres

    Mon conseil a 15 centimes, c'est que si c'est pour un dev pro, tu ferais mieux de passer a une bibliotheque managee (personnelement, j'utilise aspose.words), car pour le cout de la licence, tu vas economiser quelques journees d'arrachage de cheveux (ils ont une evalution gratuite de 30 jours)

    Pour ton probleme, regarde dans le gestionnaire de fichiers, je suis pret a parier que tu as plusieurs process word qui tournent...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Effectivement je crois que c'est la dernière fois que je vends un truc pareil

    Cela dit, y'a du mieux !! J'ai revu tout le code, de façon à n'avoir qu'une instance de Word en tout et pour tout ! Je passe donc mon object word par réf à toutes les procédures qui en ont besoin, et voici les résultat :

    - plus aucun plantage avec Office 2007 (pas mal déjà )

    - plantage avec Office 2002, uniquement lorsque je rends mon object word not visible ! C'est l'ouverture d'un document (doc = manObjWord.ObjWord.Documents.Open(workingFile)) qui plante lorsque word est invisible : "Word n'a pas pu appliquer l'évènement".....

    Votre point de vue sur ce dernier problème ?

    Quant à ton conseil à 15 cents.... je crois qu'il vaut bien plus ! Effectivement ces dvpt sont périlleux. De toute façon, je crois que je vais m'orienter définitivement vers l'openxml. Là au moins on sait où on va. Reste plus qu'à convaincre les clients d'acheter des licences 2007.....

  8. #8
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par lbonhumeau
    de façon à n'avoir qu'une instance de Word en tout et pour tout
    Voilà un objet qui pourrait avantageusement implémenter le Design Pattern Singleton.

    Autre proposition : essaye d'enregistrer le document final après chaque insertion de nouveau document (essaye aussi de le fermer, si l'enregistrement seul n'apporte rien).
    Certainement que cela va alléger les objets en mémoire et l'automation (même si tu as "tout ce qu'il faut" en mémoire). L'inconvénient sera la baisse de performance en réouvrant et enregistrant le document à chaque insertion, mais c'est peut-être un moindre mal pour un grand bien... A voir.

  9. #9
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par lbonhumeau Voir le message
    Reste plus qu'à convaincre les clients d'acheter des licences 2007.....
    D'ou l'utilisation d'un fournisseur tiers

    Pour info, la licence pro de Aspose.Words, c'est 600 euros...une journee de consultant, quoi (voire moins en fonction du consultant )

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bon, bilan (positif) des courses :

    - Ne pas créer plus d'un process winword..... sinon plantages aléatoires !

    - Un problème subsiste "de temps en temps" avec Word 2002, sur le documents.open ("Word n'a pas pu appliquer l'évènement"). Dans ce cas de figure j'itère sur la commande en temporisant entre chaque itération jusqu'à ce que ça marche. Jamais plus de 2 ou 3 fois en réalité. Pas très élégant.... mais ça résoud mon problème Ce problème ne se produit que lorsque l'objet word.application est invisible.

    Sinon tout roule maintenant.

    pvialatte, je n'ai aucun problème pour la destruction des mes process Word. Cf en pièce jointe l'objet que j'utilise si ça peut aider. Je l'utilise dans tous mes dev.
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par lbonhumeau Voir le message
    je n'ai aucun problème pour la destruction des mes process Word.
    Je connais a methode...mais j'ai eu la surprise de voir que dans un environnement serveur (pour un dev d'application web), meme cette methode la ne marchait pas a 100%

    Ca marche bien en winforms, mais des que tu es en web, les ennuis commencent...

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    Ca marche bien en winforms, mais des que tu es en web, les ennuis commencent...
    Yessss effectivement ! Je n'ai pas ce genre de contrainte avec mes applis

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

Discussions similaires

  1. [WD17] Renseigner un fichier word depuis windev en ole automation
    Par Xipotera dans le forum WinDev
    Réponses: 2
    Dernier message: 25/04/2012, 09h24
  2. Piloter Word via JS (OLE Automation)
    Par nox75 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 23/01/2009, 13h19
  3. Plantage Word OLE Automation
    Par lbonhumeau dans le forum Windows
    Réponses: 2
    Dernier message: 13/01/2009, 15h40
  4. [WD12] word ole automation
    Par battit64 dans le forum WinDev
    Réponses: 5
    Dernier message: 15/03/2008, 00h08
  5. OLE Automation : pas de menu au lancement de Word
    Par PaulR dans le forum VBA Word
    Réponses: 1
    Dernier message: 04/06/2007, 13h06

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