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

C# Discussion :

Comment lire un fichier .doc en c#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 45
    Par défaut Comment lire un fichier .doc en c#
    Bonjour à tous !

    je cherche à manipuler des documents words afin de faire des recherches par keyword dedans mais je n'arrive pas à recupéré mon text en type 'string'. J'utilise Visual Studio.

    J'ai ajouté la librairie 'MS word 16 object library' et la doc que propose microsoft est vraiment inbaisable !

    J'ai écris un petit bout de code en m'aidant des exemples que j'ai pus trouvé sur le net mais ça n'affiche rien dans la console et j'ai vraiment du mal à comprendre comment utilisé cette librairie ! J'essaye de copier dans le presse papier puis de le convertir en string avec mais ça marche pas et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Clipboard.containsData(Dataformats.StringFormat)
    me retroune false...
    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
     
    using System;
    using System.Windows.Forms;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    //using System.Runtime.InteropServices.ComTypes;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.CSharp;
    using Microsoft.Office.Core;
    using Microsoft.Office.Interop.Word;
    using Word = Microsoft.Office.Interop.Word;
    using static System.Windows.Forms.VisualStyles.VisualStyleElement;
     
    namespace Test_Word
    {
        class Program
        {
            static void Main(string[] args)
            {
     
                Word.Application wordObject = new Word.Application();
                object file = "C:/Users/****/Desktop/Test.doc";
                object nullobject = System.Reflection.Missing.Value;
     
                object Faux = (object)false;
                object Vrai = (object)true;
                Document docs = wordObject.Documents.Add(ref file, ref Faux, ref nullobject, ref Vrai);
                docs.ActiveWindow.Selection.WholeStory();
                docs.ActiveWindow.Selection.Copy(); // copy dans le presse papier
     
     
     
     
                Console.WriteLine(Clipboard.GetText());
                docs.Close(ref nullobject, ref nullobject, ref nullobject);
     
     
                Console.Read();
     
            }
        }
    }
    Y aurait-il quelqu'un sait s'en servir ou qui sait, du moins, comment recuperer le text et le transformer dans une forme conventionnelle que je puisse faire ma recherche ?

    P-t cette librairie est super puissante pour manipuler les textes provenant des .doc mais je suis pommé et y a rien qui m'aide sur le web

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    pourquoi passer par le clipboard ?

    Ne peux tu pas directement passer par Selection.Text ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne connais pas assez C# pour te donner LA réponse, mais deux choses que tu essayer:

    1) Tu prends l'enregistreur de macros de Word et tu enregistres une macro d'une recherche. Tu vas avoir un code VBA, mais tout ce dont tu as besoin, ce sont les noms d'objets de Word et leurs paramètres, que tu dois combiner avec tes objets .net. Attention, l'enregistreur de macros de Word ne supporte la souris que pour les actions portant sur le ruban et l'interface de Word. Toutes les actions sur le texte (sélection, déplacement etc.) sont faites à partir du clavier.


    2) Pour un usage occasionnel, tu peux enregistrer ton document Word (si tu as Word, pour OpenOffice, je ne sais pas) au format RTF et l'ouvrir dans un RichTextBox pour faire tes recherches.


    Pour des textes au format docx, docm (Word 2007 et après) il y a d'autres solutions. Des gratuites et des commerciales. Mais si ce sont vraiment des documents au format doc (word 2003 et avant), les choix sont plus limités. Mais si tu as un Word récent, tu peux ouvrir un .doc et l'enregistrer en docx ou docm.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 45
    Par défaut
    Bonjour à tous !

    Je vous remercie infiniment pour vos réponses !

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               string text = docs.ActiveWindow.Selection.Text;
    mais quand j'affiche 'text' dans la console il écrase les lignes, c-a-d dans le fichier word j'ai écris
    Salit Salut
    .doc
    et dans la console il m'affiche
    .doct Salut
    Je sais pas trop ce qu'il se passe

    Du coup j'ai poursuivie à passer par le presse papier, il faut rajouter l'attribut [STAThread] devant le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [STAThread]
    static void Main(string[] args)
    et ça fonctionne avec toute les extensions, .doc, .docx, .docm et .rtf ! Voila le code complet :
    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
     Word.Application wordObject = new Word.Application();
                object file = "C:/Users/public/Desktop/Test.rtf"; 
                object nullobject = System.Reflection.Missing.Value;
     
                object Faux = (object)false;
                object Vrai = (object)true;
                Document doc = new Document();
     
                 Document docs = wordObject.Documents.Add(ref file, ref Faux, ref nullobject, ref Vrai);
                docs.ActiveWindow.Selection.WholeStory();
                docs.ActiveWindow.Selection.Copy();
     
               //string text = docs.ActiveWindow.Selection.Text;
     
                 IDataObject data = Clipboard.GetDataObject();
     
                //if (Clipboard.ContainsData(DataFormats.StringFormat))
                  //Console.WriteLine("oui il y a des données sous format string ou convertible en string dans le presse papier");
               //else
                  //Console.WriteLine("nan il n'y a rien dans le presse papier");
     
                 string text =  data.GetData(DataFormats.StringFormat).ToString();
     
                Console.WriteLine(text.Count());
                Console.WriteLine(text);
     
                docs.Close(ref nullobject, ref nullobject, ref nullobject);
                Console.WriteLine("Fin");
     
                Console.Read();
    Je dois faire une recherche de mot clés dans le texte, je suppose qu'il y a mieux à faire que de passer en string pis de faire la recherche dans le string mais j'ai un peu du mal à trouvé les fonctions de la librairie MS Word pour faire la recherche. Vous savez où je peux trouvé une documentation correcte ? Parce que celle fournit par docs.microsoft.com c'est une lecture fonction par fonction...

    Ou si vous avez toutes autres solutions en tête (pour faire une recherche de mot clé dans un word), je suis preneur !

    Un grand merci à vous pour m'avoir répondu, c'est chouette de toujours trouver du soutien sur ce site, mon job ne tient qu'à ça

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 45
    Par défaut
    Rebonjour !

    J'ai un soucie avec des lettres un peu compliqué (pas simplement du texte mais de la mise en page et tout le tintouin). Il me met l'erreur
    Impossible d'ouvrir les macros de stockage
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                 Document docs = wordObject.Documents.Add(ref file, ref Faux, ref nullobject, ref Vrai);
    Une idée de ce qui se passe ?

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Documents.Add sert à créer un nouveau document Word

    Documents.Open sert à ouvrir un document Word existant


    En principe, les recherches de texte dans un document Word se font avec la méthode find


    Si tu veux continuer par le presse-papiers, même si ce n'est pas l'idéal, tu devrais pouvoir vérifier le type de données dans le presse-papier. (Du moins c'est possible en VB.) Il me semble qu'un texte Word est converti en RTF quand il est copié dans le presse-papiers. Donc, si le presse-papier contient du texte en RTF, tu peux le coller dans un RichTextBox. Ensuite, la propriété text du RichTextBox, te permet d'utiliser la classe String pour chercher dans ton texte.

Discussions similaires

  1. Comment lire un fichier doc sous Linux
    Par Pauli dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 09/01/2007, 14h22
  2. [Word] Comment lire un fichier .doc en php?
    Par jcmouniapin dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/04/2006, 04h50
  3. [BCB 5]Comment lire un fichier AVI avec un TAnimate ?
    Par Sitting Bull dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/09/2004, 11h57
  4. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06
  5. Comment lire un fichier image
    Par Charlemagne dans le forum DirectX
    Réponses: 9
    Dernier message: 12/03/2004, 00h22

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