Lire le contenu d'un fichier word [Résolu]

Signaler
Messages postés
3
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
6 mai 2015
-
KMABAZ
Messages postés
3
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
6 mai 2015
-
Bonjour,
je bute sur un problème. J'aimerai lire des tableaux contenus dans un fichier word et les enregistrer dans une base de données. Merci !!!!

3 réponses

Messages postés
27580
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2020
323
Bonjour,


Créé une class et colles-y le code suivant :
Imports Microsoft.Office.Interop


Public Class msWord

    Public oWord As Microsoft.Office.Interop.Word.Application
    Public oDoc As Microsoft.Office.Interop.Word.Document

    Public Function openDoc(ByRef strDoc) As Object
        oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oDoc = oWord.Documents.Open(strDoc)
        Return oWord
    End Function

    Public Function getTables() As Object
        Dim Tbl() As Microsoft.Office.Interop.Word.Table
        Dim i As Long
        Dim nbTbl As Long
        'Nombre de tableaux dans le document
        nbTbl = oDoc.Tables.Count
        ReDim Preserve Tbl(nbTbl - 1)

        For i = 1 To nbTbl
            Tbl(i - 1) = oDoc.Tables(i)
        Next

        Return Tbl
    End Function

    Public Function getValCell(ByRef Cellule As Object) As String
        Dim valeurCellule As String = ""
        valeurCellule = Cellule.Range.Text.ToString
        Return valeurCellule
    End Function

    Public Function docClose() As Boolean
        oDoc.Close()
        oDoc = Nothing
        Return True
    End Function

    Public Function getTbltoArray(ByRef Table) As Array
        Dim Cell As Object
        Dim valCell As String

        Dim nbRows As Long = Table.Rows.Count
        Dim nbCols As Long = Table.Columns.Count
        Dim arrResult(nbRows, nbCols) As String
        'Pour chaque ligne du tableau
        For i = 1 To nbRows
            'Pour chaque colonne...
            For j = 1 To nbCols
                Cell = Table.Columns(j).Cells(i)
                valCell = getValCell(Cell)
                arrResult(i, j) = valCell
            Next
        Next
        Return arrResult
    End Function

End Class




Ne pas oublier d'ajouter la référence à word ..

Add a reference to the Microsoft Word Object Library. To do this, follow these steps:
On the Project menu, click Add Reference.
On the COM tab, locate the Microsoft Word Object Library and click Select.


Dans ton code ( par exemple je l'ai mis dans un bouton d'un FORM )
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim fichier As String = "c:\tmp\test.docx"
        Dim wordClass As New msWord
        Dim Doc As Object
        Dim tables As Object

        Doc = wordClass.openDoc(fichier)
        tables = wordClass.getTables()

        For Each Tableau In tables 'pour chaque tableau du document
            Dim arrTbl As Array = wordClass.getTbltoArray(Tableau)
            For i = 1 To UBound(arrTbl)
                Console.WriteLine("----------------------")
                For j = 1 To UBound(arrTbl, 2)
                    Console.Write(arrTbl(i, j))
                Next
            Next
        Next

        'fermeture du classeur
        wordClass.docClose()
    End Sub


Bien entendu .. je n'ai fais qu'afficher le contenu du tableau...
A toi de coder l'enregistrement en BDD !

EDIT : Petite amélioration de la class.


Cordialement,
Jordane
Messages postés
3
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
6 mai 2015

Merci jordane. je teste ton code et je te répondrai de suite. Merci c'est gentil
Messages postés
3
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
6 mai 2015

J'ai testé ton code et cela marche. J'ai près de 52 tableau dans mon document. J'arrive à remplir ma base SQL, sauf qu'au bout d'un temps, il m'affiche une erreur dans la fonction gettbltoarray. je saurais resoudre cela, encore une fois merci et bonne journée....