Ler a partir do documento word linha por linha


Estou a tentar ler um documento do word usando c#. Eu sou capaz de obter todo o texto, mas eu quero ser capaz de ler linha por linha e armazenar em uma lista e ligar a um gridview. De momento, o meu código devolve uma lista de um item apenas com todo o texto (não Linha por linha como desejado). Estou a usar a Microsoft .Escritorio.Interop.Palavra biblioteca para ler o ficheiro. Abaixo está o meu código até agora.

    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();
Author: John Saunders, 2013-09-01

3 answers

Está bem. Eu encontrei a solução aqui.


O código final é o seguinte:

    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();
 19
Author: Bat_Programmer, 2013-09-01 04:24:12

O código acima está correcto, mas é muito lento. Eu melhorei o código, e é muito mais rápido do que o acima.

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
Author: Pratik Anjania, 2016-03-19 13:16:35
Que tal este yo? Arranja todas as palavras do médico e divida-as em troca ou o que for melhor para ti. Em seguida, transformar em lista
   List<string> lines = doc.Content.Text.Split('\n').ToList();
 2
Author: Chris, 2016-10-19 02:51:53