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 :

HRESULT sur un objet COM Word


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut HRESULT sur un objet COM Word


    Je travailles sur une application web VB.Net/ASP avec laquelle je produit des fichiers Word. Jusque là tout allait bien mais d'un coup, dès que je veux produire un fichier Word, j'ai une "Exception de HRESULT : 0x800706BE".

    Je suis en local avec Visual Studio 2010. J'ai même redémarré le PC au cas où plus rien n'y fait. D'où cela pourrait-il venir ? D'après mon debug, cela viendrait de mon code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _doc.Bookmarks.Item(bookmark).Range.InlineShapes.AddPicture(filename)
    Ca le fait dès l'insertion de la première image alors que ça a toujours fonctionné, bizarre...


    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Bizarrement, ça fonction avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _word.ActiveDocument.Bookmarks.Item(bookmark).Range.InlineShapes.AddPicture(filename)
    Pourtant l'autre variable à bien gardé la référence vers le document.

    ... Merci moi-même
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Bon bin finalement, aujourd'hui j'ai de nouveau cette erreur avec ma nouvelle solution et du coup, des deux manières, cela ne fonctionne plus

    Si quelqu'un peut m'expliquer le pourquoi du comment... là je sature avec ces comportements indéterminés

    J'ai une classe qui me permet de gérer les insertions plus facilement dans les fichiers Word, voici le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                Sub New(ByVal wordModel As String, Optional ByVal showWordInstance As Boolean = True)
                    Try
                        _word = New IWord.Application
     
                        _word.Visible = showWordInstance
                        _doc = _word.Documents.Add(wordModel)
     
                        _docPath = wordModel
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Sub
    Et la procédure qui permet l'insertion d'une image à un emplacement précis via un bookmark
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                Public Sub InsertImage(ByVal bookmark As String, ByVal filename As String)
                    Try
                        _word.ActiveDocument.Bookmarks.Item(bookmark).Range.InlineShapes.AddPicture(filename)
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Sub
    Cela à toujours fonctionné mais maintenant, ça me fait planter systématiquement Word au moment de l'insertion.

    Voici le code complet de la classe... si jamais ça peut être utile pour résoudre mon problème:
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    Imports Microsoft.VisualBasic
    Imports System
    Imports System.Data
    Imports System.IO
    Imports System.Web
    Imports IWord = Microsoft.Office.Interop.Word
    Imports System.Runtime.InteropServices.Marshal
     
    Namespace SDEA
        Namespace Interop
            Public Class Word
                Implements IDisposable
    #Region "Membres privés"
                Private _word As IWord.Application
                Private _doc As IWord.Document
                Private _docPath As String
    #End Region
     
    #Region "Propriétés publiques"
                Public ReadOnly Property WordObject() As IWord.Application
                    Get
                        Return _word
                    End Get
                End Property
     
                Public ReadOnly Property DocObject() As IWord.Document
                    Get
                        Return _doc
                    End Get
                End Property
     
                Public ReadOnly Property NB_Tables() As Integer
                    Get
                        Return _doc.Tables.Count
                    End Get
                End Property
     
                Public ReadOnly Property Tables() As IWord.Tables
                    Get
                        Return _doc.Tables
                    End Get
                End Property
    #End Region
     
    #Region "Constructeurs/Destructeurs"
                Sub New(ByVal wordModel As String, Optional ByVal showWordInstance As Boolean = True)
                    Try
                        _word = New IWord.Application
     
                        _word.Visible = showWordInstance
                        _doc = _word.Documents.Add(wordModel)
     
                        _docPath = wordModel
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Sub
    #End Region
     
    #Region "Procédures et fonctions publiques"
                Public Sub InsertImage(ByVal bookmark As String, ByVal filename As String)
                    Try
                        _word.ActiveDocument.Bookmarks.Item(bookmark).Range.InlineShapes.AddPicture(filename)
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Sub
     
                Public Sub InsertText(ByVal bookmark As String, ByVal text As String)
                    Try
                        _word.ActiveDocument.Bookmarks.Item(bookmark).Range.Text = text
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Sub
     
    #Region "Procédures de gestion des yableaux"
                Public Sub InsererTableau(ByVal bookmark As String,
                                          Optional ByVal nbRows As Integer = 1,
                                          Optional ByVal nbCols As Integer = 1,
                                          Optional ByVal style As String = "")
     
                    Dim oTable As IWord.Table = _doc.Tables.Add(_doc.Bookmarks.Item(bookmark).Range, nbRows, nbCols)
     
                    If Not String.IsNullOrEmpty(style) Then
                        oTable.Style = style
                    End If
                End Sub
     
                Public Sub InsererTableau(ByVal bookmark As String,
                                          ByRef tableSource As System.Web.UI.WebControls.Table,
                                          Optional ByVal style As String = "")
     
                    Dim oTable As IWord.Table = _doc.Tables.Add(_doc.Bookmarks.Item(bookmark).Range, tableSource.Rows.Count, tableSource.Rows(0).Cells.Count)
     
                    For r As Integer = 0 To tableSource.Rows.Count - 1
                        For c As Integer = 0 To tableSource.Rows(r).Cells.Count - 1
                            oTable.Cell(r + 1, c + 1).Range.Text = tableSource.Rows(r).Cells(c).Text
                        Next
                    Next
     
                    If Not String.IsNullOrEmpty(style) Then
                        oTable.Style = style
                    End If
                End Sub
     
                Public Sub AjouterLigneTableau(ByRef table As IWord.Table)
                    table.Rows.Add()
     
                    For i As Integer = 1 To table.Rows(0).Cells.Count
                        table.Rows(table.Rows.Count).Cells.Add()
                    Next
                End Sub
     
                Public Sub AjouterLigneTableau(ByRef table As IWord.Table, ByVal nbCells As Integer)
                    table.Rows.Add()
     
                    For i As Integer = 1 To nbCells
                        table.Rows(table.Rows.Count).Cells.Add()
                    Next
                End Sub
    #End Region
    #End Region
     
    #Region "IDisposable Support"
                Private disposedValue As Boolean
     
                Protected Overridable Sub Dispose(disposing As Boolean)
                    If Not Me.disposedValue Then
                        If disposing Then
                            ' TODO: supprimez l'état managé (objets managés).
                        End If
     
                        ' TODO: libérez les ressources non managées (objets non managés) et substituez la méthode Finalize() ci-dessous.
                        ReleaseComObject(_doc)
                        ReleaseComObject(_word)
     
                        GC.Collect()
                        GC.WaitForPendingFinalizers()
     
                        ' TODO: définissez les champs volumineux à null.
                    End If
                    Me.disposedValue = True
                End Sub
     
                ' TODO: substituez Finalize() uniquement si Dispose(ByVal disposing As Boolean) ci-dessus comporte du code permettant de libérer des ressources non managées.
                Protected Overrides Sub Finalize()
                    ' Ne modifiez pas ce code. Ajoutez du code de nettoyage dans Dispose(ByVal disposing As Boolean) ci-dessus.
                    Dispose(False)
                    MyBase.Finalize()
                End Sub
     
                Public Sub Dispose() Implements IDisposable.Dispose
                    Dispose(True)
                    GC.SuppressFinalize(Me)
                End Sub
    #End Region
            End Class
        End Namespace
    End Namespace
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    J'aurais une petite question : la clef d'activation de Word est-elle toujours valide? Je me souviens avoir eu ce problème en installant une application utilisant les fonctions COM pour remplir un document Excel, sur un PC dont la clef était expirée. Par contre cela lançait bien Excel pour me prévenir, donc je ne pense pas qu'il s'agisse de cela.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message
    J'aurais une petite question : la clef d'activation de Word est-elle toujours valide? Je me souviens avoir eu ce problème en installant une application utilisant les fonctions COM pour remplir un document Excel, sur un PC dont la clef était expirée. Par contre cela lançait bien Excel pour me prévenir, donc je ne pense pas qu'il s'agisse de cela.
    Non c'est pas ça le problème, ça m'ouvre bien Word et le document modèle mais ensuite à la première insertion ça fait planter Word et j'arrive sur l'exception sur visual studio.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Cela à toujours fonctionné mais maintenant, ça me fait planter systématiquement Word au moment de l'insertion.
    Qu'est ce qui s'est passé? Un changement de version de Word, d'interop, Visual Studio, autre?

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message
    Qu'est ce qui s'est passé? Un changement de version de Word, d'interop, Visual Studio, autre?
    Rien du tout, à un moment je génère un fichier Word ça fonctionne et ensuite plus rien. J'ai même reconstruit le fichier modèle et me disant que lors d'un ajout j'ai merdé un truc mais rien n'y fait. Je pige vraiment pas.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Après quelques tests et surtout un pas-à-pas, cela ne plante pas, je pense que c'est dû à une liaison tardive peut être entre le programme et l'objet COM.
    Suffit de trouver comment résoudre ce problème
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Manipulation d'objets COM de WORD en DotNet
    Par toma8175 dans le forum C#
    Réponses: 9
    Dernier message: 16/04/2008, 10h20
  2. [COM] Documentation fonctionnalités "objet COM" / word
    Par Finidrigoler dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/08/2006, 16h27
  3. [COM] Pilotage de Word à partir d'un objet COM
    Par Sangdrax1604 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 05/06/2006, 16h04
  4. [VBA-W]Documentation sur le modèle objet de Word
    Par BugFactory dans le forum VBA Word
    Réponses: 3
    Dernier message: 02/05/2006, 12h40
  5. Documentation sur Objet COM et ASP ?
    Par delphinote dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 08/09/2005, 20h55

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