none
Récupérer le contenu d'un fichier docx RRS feed

  • Question

  • Salut !

    Est-il possible de récupérer le texte burt d'un fichier docx en Visual Basic 2008 ?

    RichtextBox pas compatible :( Merci.

    PS : Pour rédiger dans ce forum, pourquoi la police change t-elle de taille pour un oui pour un non ?


    samedi 6 septembre 2014 22:02

Réponses

    • Marqué comme réponse Michel56100 mercredi 10 septembre 2014 23:42
    lundi 8 septembre 2014 09:23
  • Salut ! Merci mille fois ! Voici le code que j'ai modifié pour le rendre sensible et insensible à la casse.

    Imports System.IO
    Imports System.Xml
    Imports System.IO.Packaging
    
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim docWord As String, officePackage As Package
            Dim mainPart As PackagePart = Nothing
            Dim documentUri As Uri = Nothing
    
            docWord = "D:\Test.docx"
            'Ouverture du package en lecture
            officePackage = Package.Open(docWord, FileMode.Open, FileAccess.Read)
    
            'type de contenu pour la partie principale
            Const officeDocRelType As [String] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
    
            'On récupère la partie contenant les propriétés
            For Each relationship As PackageRelationship In officePackage.GetRelationshipsByType(officeDocRelType)
                ' Il n'y a qu'une seule partie de type partType dans le package
                documentUri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), relationship.TargetUri)
                mainPart = officePackage.GetPart(documentUri)
                Exit For
            Next
            If mainPart IsNot Nothing Then
                'chargement de la partie dans un XmlDocument
                Dim doc As New XmlDocument()
                doc.Load(mainPart.GetStream())
    
                If CheckBoxCasse.Checked = True Then
                    'Sensible à la casse
                    If doc.DocumentElement.InnerText.Contains(TextBox1.Text) Then
                        MessageBox.Show("Texte trouvé dans le document")
                    Else
                        MessageBox.Show("Impossible de trouver le texte dans le document")
                    End If
                Else
                    'Insensible à la casse
                    If doc.DocumentElement.InnerText.ToLower.Contains(TextBox1.Text.ToLower) Then
                        MessageBox.Show("Texte trouvé dans le document")
                    Else
                        MessageBox.Show("Impossible de trouver le texte dans le document")
                    End If
                End If
            End If
    
            'Fermeture du package
            officePackage.Close()
        End Sub
    End Class
    J'ai oublié de dire qu'il faut ajouter la référence WindowsBase dans .Net. Pas besoin du OpenXml SDK.
    • Modifié Michel56100 mercredi 10 septembre 2014 23:21
    • Marqué comme réponse Michel56100 mercredi 10 septembre 2014 23:42
    mercredi 10 septembre 2014 23:19

Toutes les réponses

    • Marqué comme réponse Michel56100 mercredi 10 septembre 2014 23:42
    lundi 8 septembre 2014 09:23
  • Salut ! Merci mille fois ! Voici le code que j'ai modifié pour le rendre sensible et insensible à la casse.

    Imports System.IO
    Imports System.Xml
    Imports System.IO.Packaging
    
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim docWord As String, officePackage As Package
            Dim mainPart As PackagePart = Nothing
            Dim documentUri As Uri = Nothing
    
            docWord = "D:\Test.docx"
            'Ouverture du package en lecture
            officePackage = Package.Open(docWord, FileMode.Open, FileAccess.Read)
    
            'type de contenu pour la partie principale
            Const officeDocRelType As [String] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
    
            'On récupère la partie contenant les propriétés
            For Each relationship As PackageRelationship In officePackage.GetRelationshipsByType(officeDocRelType)
                ' Il n'y a qu'une seule partie de type partType dans le package
                documentUri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), relationship.TargetUri)
                mainPart = officePackage.GetPart(documentUri)
                Exit For
            Next
            If mainPart IsNot Nothing Then
                'chargement de la partie dans un XmlDocument
                Dim doc As New XmlDocument()
                doc.Load(mainPart.GetStream())
    
                If CheckBoxCasse.Checked = True Then
                    'Sensible à la casse
                    If doc.DocumentElement.InnerText.Contains(TextBox1.Text) Then
                        MessageBox.Show("Texte trouvé dans le document")
                    Else
                        MessageBox.Show("Impossible de trouver le texte dans le document")
                    End If
                Else
                    'Insensible à la casse
                    If doc.DocumentElement.InnerText.ToLower.Contains(TextBox1.Text.ToLower) Then
                        MessageBox.Show("Texte trouvé dans le document")
                    Else
                        MessageBox.Show("Impossible de trouver le texte dans le document")
                    End If
                End If
            End If
    
            'Fermeture du package
            officePackage.Close()
        End Sub
    End Class
    J'ai oublié de dire qu'il faut ajouter la référence WindowsBase dans .Net. Pas besoin du OpenXml SDK.
    • Modifié Michel56100 mercredi 10 septembre 2014 23:21
    • Marqué comme réponse Michel56100 mercredi 10 septembre 2014 23:42
    mercredi 10 septembre 2014 23:19
  • Salut ce code ci-dessus marche à merveille. Mais l'inconvénient, il ne lit pas dans les entêtes et bas de pages. Y a-t-il une parade ? Merci
    samedi 13 septembre 2014 10:36