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

Scripts/Batch Discussion :

Rechercher une chaîne de caractères dans un DOCX sans Word installé sur le PC


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut Rechercher une chaîne de caractères dans un DOCX sans Word installé sur le PC
    Bonjour,

    Après plusieurs recherches, je n'arrive pas à trouver une solution à mon problème.
    J'aurai besoin de rechercher des mots/chaînes de caractères dans un fichier *.docx sans Word installé sur le PC. Malheureusement, je ne trouve pas de solution.

    J'ai tenté de trouver une library comme nous pouvons trouver pour Excel afin de manipuler des fichiers (PSExcel,...) mais je ne trouve rien.
    J'ai tenté d'installer les PIA de Microsoft Office 2010 (Primary Interop Assemblies Redistributable) mais Nok.

    Avez-vous une idée de comment je pourrai faire ? Est-ce possible ?
    J'aurai besoin simplement de vérifier si des mots clés existent dans le fichier *.docx (pas besoin d'enregistrer ou autres).

    Merci !
    Cordialement

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 177
    Points : 5 738
    Points
    5 738
    Par défaut
    Cela existe.

    Le docx n'est qu'un archive tu peut l'extraire tel un zip.
    'document.xml' est le fichier qui t’intéresse il faut que tu t'oriente vers du 'Open XML'.

    Voir :
    https://msdn.microsoft.com/en-us/lib...ffice.12).aspx
    http://powertools.codeplex.com/

  3. #3
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 836
    Points : 9 217
    Points
    9 217

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Merci pour l’information !

    Je ne connaissais pas. En effet, OpenXML semble être la solution .

    J’ai regardé rapidement, je ne comprends pas très bien, j’aurai besoin de Visual Studio pour builder/installer la class library OpenXML dans Powershell ?
    Je suppose que non, nous pouvons importer les modules nécessaires simplement ?

    J'aurai besoin d'extraire chaque docx ou avec les PowerTools for Open XML, je pourrai travailler directement avec le docx ?
    Si vous avez des exemples de code ou autres je suis preneur !

    Merci pour votre aide !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je me permets de relancer le sujet.
    Pourriez vous m'aiguiller sur comment utiliser les "PowerTools for Open XML" afin de recherches des mots-clés dans un fichier *.docx ?

    Merci

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Le début de le pelote* :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $d=New-WmlDocument .\Valid.docx
    $d.MainDocumentPart.Value
    #de type string
    Ensuite un Select-String fera l'affaire.

    * si toutefois tu as résolu son installation

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci pour votre réponse !

    En effet, je suis encore bloqué sur l'importation du module Open-Xml-PowerTools comme je n'ai Visual Studio.
    La procédure semble être celle-ci :

    Make sure you are running PowerShell 3.0 or later
    If necessary, set your execution policy. Run PowerShell as administrator and Set-ExecutionPolicy Unrestricted (or RemoteSigned)
    cd ~/Documents/WindowsPowerShell/Modules
    git clone https://github.com/OfficeDev/Open-Xml-Sdk
    git clone https://github.com/OfficeDev/Open-Xml-PowerTools
    Using Visual Studio, open Open-Xml-Sdk/Open-XML-SDK.sln
    Build the solution. To validate the build, open the Test Explorer (pick TEST -> Windows -> Test Explorer from the menu). Click Run All.
    To start using the Open-Xml-PowerTools Cmdlets, in PowerShell, Import-Module Open-Xml-PowerTools
    Using Visual Studio, open Open-Xml-PowerTools/OpenXmlPowerToolsExamples.sln
    Build the solution. To validate the build, open the Test Explorer. Click Run All.
    To run an example, set the example as the startup project, and press F5.

    Mais comme je n'ai pas Visual Studio ça ne fonctionne pas.
    J'ai trouvé cet article qui indique qu'il faut installer l'assembly avant mais je n'ai pas de DLL autant dans le SDk que dans les PowerTools.

    Si vous savez comment importer le module PowerTools sans utiliser VS je suis preneur... je pense que cela est possible mais je n'ai pas encore trouvé.

    Merci !

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yamaha12 Voir le message
    Si vous savez comment importer le module PowerTools sans utiliser VS je suis preneur... je pense que cela est possible mais je n'ai pas encore trouvé.
    Oui, le setup doit être dans sa todo list

    Alors après qq recherches et essais voici une approche manuelle :
    installer Nuget (nuget.exe - latest (v3.4.4))
    installer le package dédié:
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
     .\NuGet.exe install OpenXmlPowerTools #https://www.nuget.org/packages/OpenXmlPowerTools/
    L'installation se fait dans le répertoire courant, Nuget installe les dlls requises qui sont :
    • DocumentFormat.OpenXml.dll
    • System.IO.Packaging.dll
    • OpenXmlPowerTools.dll


    Ne pas copier la DLL automation (on utilise celle de Powershell)

    Copier ces DLL dans le répertoire de la solution VS (Open-Xml-PowerTools-vNext).
    Ne pas copier la DLL automation (on utilise celle de Powershell)
    Dés lors plus besoin de VS.

    Enfin commenter dans le fichier Open-XML-PowerTools.psm1 la ligne
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #. "$PSScriptRoot\AddTypes.ps1"
    Sinon ce script compile la dll à chaque import du module
    Et références des fichiers du projet VS ce qui fait que l'import échoue.

    Je n'ai pas encore extrait tous les fichiers pour un faire une installation par copy.
    Enfin dece que j'ai vu il me semble que les démos sont plus orientées création de doc/conversion que traitements sur un docx existant.
    Il existe une méthode SearchReplace reste à faire du reverse pour trouver le Search ...et pour trouver la doc

    La présence du script Addtype.ps1 me fait tout de même douter de la construction de ce module, même si le code C# semble propre et a du nécessiter bcp d'effort de la part de l'auteur.
    Par exemple la dll OpenXmlPowerTools.dll contient des cmdlets mais peu sont publics, on se demande bien pourquoi procéder ainsi...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup pour votre aide !
    Je vais tester !

    Comme vous indiquez que vous avez des doutes sur ce module, avez-vous sinon une autre solution afin de pouvoir rechercher des mots-clés dans un fichier *.docx sans Word installé ?

    Sinon je pensai simplement dézipper chaque *.docx afin de travailler sur les fichiers XML directement mais il semblerai que lors de l'extract, nous retrouvons uniquement la première page.

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yamaha12 Voir le message
    Comme vous indiquez que vous avez des doutes sur ce module,
    Oui, mais il faut les lever en étudiant de plus près le code. Mes propos ne sont pas là pour semer le doute sur ce module mais d'inciter à la prudence et à approfondir.
    Ensuite si tu dois juste faire open/search pour un traitement unique, tu peux passer outre ma remarque.

    Citation Envoyé par yamaha12 Voir le message
    avez-vous sinon une autre solution afin de pouvoir rechercher des mots-clés dans un fichier *.docx sans Word installé ?
    J'ai noté ces deux projets qui sont actif :
    https://docx.codeplex.com/
    https://github.com/ClosedXML/ClosedXML (Excel) ou ceci
    Mais sans aller plus loin, ils proposent des classes C# pas des cmdlets, là faut creuser le code

    Citation Envoyé par yamaha12 Voir le message
    Sinon je pensai simplement dézipper chaque *.docx afin de travailler sur les fichiers XML directement mais il semblerai que lors de l'extract, nous retrouvons uniquement la première page.
    Je ne sais pas je n'ai jamais fait.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Ok, merci pour ces infos.

    Je vais essayer votre méthode avec l'installation de Nuget. Si je comprends bien, ça permet uniquement de générer les DLL

    Ensuite récupérant les DLL, je pourrai ainsi copier Open-Xml-PowerTools-vNext sur d'autres PC par exemple ?

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yamaha12 Voir le message
    Si je comprends bien, ça permet uniquement de générer les DLL
    Les packages Nuget contiennent des DLL compilées, cela permet de 'distribuer des fichiers dépendants'.
    Citation Envoyé par yamaha12 Voir le message
    je pourrai ainsi copier Open-Xml-PowerTools-vNext sur d'autres PC par exemple ?
    Oui, peut être pas tout le répertoire.
    J'essaie de créer un module complet et autonome afin de le placer sur cette galerie
    Avec la PS v5 un Install-Module peut suffire. Pour info Publish-Module crée un package Nuget (.nupkg -> Archive zip structuré)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Très bien, merci je vais tenter
    Citation Envoyé par Laurent Dardenne Voir le message
    J'essaie de créer un module complet et autonome afin de le placer sur cette galerie
    Hey !! ce serait vraiment génial, c'est vraiment sympa !
    Vous pourrez me tenir informé si vous y arrivé ?

  14. #14
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yamaha12 Voir le message
    Vous pourrez me tenir informé si vous y arrivé ?
    Non
    Cela devrait être assez rapide, restera à le tester.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    Cela devrait être assez rapide, restera à le tester.
    Je veux bien être le testeur

  16. #16
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yamaha12 Voir le message
    Je veux bien être le testeur
    C'est par ici
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #PS v5
    $PSGalleryPublishUri = 'https://www.myget.org/F/ottomatt/api/v2/package'
    $PSGallerySourceUri = 'https://www.myget.org/F/ottomatt/api/v2'
     
     #Décomenter si jugé nécessaire -InstallationPolicy Trusted
    Register-PSRepository -Name OttoMatt -SourceLocation $PSGallerySourceUri -PublishLocation $PSGalleryPublishUri #-InstallationPolicy Trusted
     
    # !!! PREQUIS PowershellGet 1.1.1.0  --> -AllowClobber
    Install-Module Open-XML-PowerTools -Repository OttoMatt -verbose -force -Scope AllUsers -AllowClobber
    Ce n'est pas testé , du tout

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Super merci !

    Je ne peux pas tester maintenant, je testerai demain et je te ferai un retour

  18. #18
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yamaha12 Voir le message
    je testerai demain et je te ferai un retour
    Tu as la version 5 de Powershell ?
    J'ai relivré le package, le numéro de version du module doit être codé sur 3 digits : 1.0.0 et pas 1.0
    Je testerais + tard la publication via Publish-Module

  19. #19
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Une fois installé, le module se charge.
    J'ai laissé les exemples dans le répertoire du module :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $m=ipmo Open-XML-PowerTools -pass
    $PathOXP=$m.ModuleBase 
    $Docx=New-WmlDocument "$PathOXP\Cmdlet-Examples\Valid.docx"
    $Result=$Docx.MainDocumentPart.Value|Select-String 'video'
    $Result[0]|Select-Object *

    Par contre le numéro de version du module est tjr 1.0 après 1 an de dev, à priori il doit versionner ces assemblies, mais pas le module Powershell.

    Le package actuel est basé sur la branche Git Vnext et pas Master, il faut donc regarder de temps en temps si le code évolue.
    Si j'ai le temps et si nécessaire je republierais une nouvelle version.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Bonjour Laurent,

    Je viens de tester et ça fonctionne parfaitement !
    Vraiment un très bon travail, merci !

    J'ai pu le télécharger et même le transférer sur un notre poste avec réimportation fonctionnelle.
    J'ai la version 5 de powershell. Juste pour savoir, ça ne fonctionne pas sur les versions antérieurs ?

    La code powershell que tu indiques ci-dessous pour la recherche est la preuve que ça fonctionne .

    Question bête pour ma connaissance personnelle, pour ton importation du module tu utilises l'option "-pass". C'est comme l'option -PassThru ?
    Quel est l'intérêt de l'utiliser pour l'import' ?

    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/07/2014, 03h31
  2. Réponses: 2
    Dernier message: 17/01/2010, 02h01
  3. Réponses: 3
    Dernier message: 13/05/2008, 14h11
  4. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 13h51
  5. Réponses: 3
    Dernier message: 09/05/2002, 02h39

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