web-dev-qa-db-ja.com

Word文書から1行ずつ読み取る


C#を使用してWord文書を読み込もうとしています。私はすべてのテキストを取得できますが、行ごとおよびリストに保存してグリッドビューにバインドを読みたいです。現在、私のコードは、すべてのテキストを含む1つのアイテムのリストを返します(必要な行ごとではありません)。 Microsoft.Office.Interop.Wordライブラリを使用してファイルを読み取ります。以下はこれまでの私のコードです:

    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

OK。私は解決策を見つけました こちら


最終的なコードは次のとおりです。

    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

上記のコードは正しいですが、遅すぎます。コードを改善しましたが、上記のコードよりもはるかに高速です。

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

これはどう?ドキュメントからすべての単語を取得し、戻り値またはあなたにとってより良いものに分割します。次にリストに変換します

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