web-dev-qa-db-fra.com

Lire le document Word ligne par ligne


J'essaie de lire un document Word en utilisant C #. Je peux obtenir tout le texte mais je veux pouvoir lire ligne par ligne et stocker dans une liste et lier à une grille. Actuellement, mon code renvoie une liste d'un élément uniquement avec tout le texte (pas ligne par ligne comme vous le souhaitez). J'utilise la bibliothèque Microsoft.Office.Interop.Word pour lire le fichier. Voici mon code jusqu'à présent:

    Application Word = new Application();
    Document doc = new Document();

    object fileName = path;
    // Define an object to pass to the API for missing parameters
    object missing = System.Type.Missing;
    doc = Word.Documents.Open(ref fileName,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing);

    String read = string.Empty;
    List<string> data = new List<string>();
    foreach (Range tmpRange in doc.StoryRanges)
    {
        //read += tmpRange.Text + "<br>";
        data.Add(tmpRange.Text);
    }
    ((_Document)doc).Close();
    ((_Application)Word).Quit();

    GridView1.DataSource = data;
    GridView1.DataBind();
16
Bat_Programmer

D'accord. J'ai trouvé la solution ici .


Le code final est le suivant:

    Application Word = new Application();
    Document doc = new Document();

    object fileName = path;
    // Define an object to pass to the API for missing parameters
    object missing = System.Type.Missing;
    doc = Word.Documents.Open(ref fileName,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing);

    String read = string.Empty;
    List<string> data = new List<string>();
    for (int i = 0; i < doc.Paragraphs.Count; i++)
    {
        string temp = doc.Paragraphs[i + 1].Range.Text.Trim();
        if (temp != string.Empty)
            data.Add(temp);
    }
    ((_Document)doc).Close();
    ((_Application)Word).Quit();

    GridView1.DataSource = data;
    GridView1.DataBind();
21
Bat_Programmer

Le code ci-dessus est correct, mais il est trop lent. J'ai amélioré le code, et c'est beaucoup plus rapide que celui ci-dessus.

List<string> data = new List<string>();
Application app = new Application();
Document doc = app.Documents.Open(ref readFromPath);

foreach (Paragraph objParagraph in doc.Paragraphs)
    data.Add(objParagraph.Range.Text.Trim());

((_Document)doc).Close();
((_Application)app).Quit();
6
Pratik Anjania

Que diriez-vous yo. Obtenez tous les mots du document et divisez-les à votre retour ou quoi de mieux pour vous. Transformez ensuite en liste

   List<string> lines = doc.Content.Text.Split('\n').ToList();
3
Chris