none
Object COM Word (Interop) RRS feed

  • Question

  • Bonjour,

    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:

    _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...

    Merci.


    mercredi 17 février 2016 14:34

Toutes les réponses

  • Bonjour,

    J'avais réussi à palier le problème avec ce code:

    _word.ActiveDocument.Bookmarks.Item(bookmark).Range.InlineShapes.AddPicture(filename)

    Mais ça bug de nouveau aujourd'hui, et avec les deux manières de faire... Je désespère !

    Si quelqu'un peut m'expliquer le pourquoi du comment... là je sature avec ces comportements indéterminés. Voici le code complet de ma classe qui me permettra de gérer mes fichiers Word:

    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
    

    Ca plante au premier

    InsertImage

    Merci d'avance.

    mardi 23 février 2016 13:09