2013-09-01 8 views
11


私はC#を使用してワードドキュメントを読み込もうとしています。私はすべてのテキストを取得することができますが、私は行をでリストに格納し、gridviewにバインドすることができるようにしたいと思います。現在、私のコードは、すべてのテキスト(必要に応じて行単位ではありません)で1つの項目のリストを返します。私はファイルを読むためにMicrosoft.Office.Interop.Wordライブラリを使用しています。以下は現在までのコードです:ワードドキュメントから行ごとに読み取る

+0

これは、上記のコードのすべてですか?今週末には、単語ファイルを読み込んで二重引用符間のコードをすべて取り出し、変数 "A"を挿入するプロジェクトを開始する予定です。次に、コンマの後ろの部分を "A"と置き換えなければなりません。B.彼のコードに関するいくつかの統計をしたい作家のためです。私はすべての人に見せるために自分のコードを入れます。特別な輸入品はありますか? –

+1

DocX http://docx.codeplex.comのような軽量ライブラリを使用します。 – Hamdi

+0

@Hamdi私はそれについて知りませんでした。私は試してみましたが、Interopとは対照的に使用するのは簡単です。もう一度ありがとう。 –

答えて

17

私は解決策を見つけたhere。次のように


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

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(); 
+0

@ openメソッドのコードでは、そのパスが有効ではなく、一部の 'COMExceptionが処理されませんでした'と表示されます。 –

+0

ASP.NETや他のサーバーテクノロジからOffice Interopを使用することは恐ろしい考えです。これらのAPIは、デスクトップアプリケーション(オフィスアプリケーションのスイート)を自動化するために作成されました。サーバーアプリケーションはさまざまな点で異なるため、Office Interopを使用することは非常に悪い考えです。 Microsoftによってもサポートされておらず、Officeライセンスに違反する可能性があります。 [Officeのサーバー側の自動化に関する考慮事項](http://support.microsoft.com/kb/257757) –

6

上記のコードは正しいですが、それはあまりにも遅いです。 私はコードを改良しました。これは上記のコードよりはるかに高速です。

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(); 
1

この場合はいかがですか。文書からすべての言葉を入手して、あなたのために良いものがあればそれを分けて分割します。リストに入る

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

\ r \ aでも、\ rは行いません。\ n – thang

関連する問題