2016-05-18 6 views
0

プログラムでWordファイルの内容を開き、読み取るプロシージャがあります。手順にかかる時間は明らかに文書のサイズに比例しますが、約8分で平均100件の文書を読むことができます。時折、私は次のWordのエラーを取得:Word文書をループする

The file is in use by another application or user. (C:...\Templates\Normal.dotm). This error is commonly encountered when a read lock is set on the file that you are attempting to open.

は、その後の手順は、Word.exeプロセスおよびタスクマネージャの無限の数が急速にいっぱいに呼び出してしまいます。

Q)次のファイルを読むために新しいWordプロセスを起動する前に、手順を改善してどのように待つことができますか?今は、前のファイルを読むのにかかる時間に依存しているようです。 - ありがとう

private void readWordDoc(bool reportMode, string file) 
    { 
     try 
     { 
      Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); 
      object miss = System.Reflection.Missing.Value; 

      object path = @file; 
      object readOnly = true; 
      Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss); 
      string totaltext = ""; 
      for (int i = 0; i < docs.Paragraphs.Count; i++) 
      { 
       totaltext += "\n" + docs.Paragraphs[i + 1].Range.Text.ToString(); 
      } 
      docs.Close(); 
      word.Quit(); 

      if (!reportMode) 
      { 
       rtxtDocViewer.Text = totaltext; 
      } 

      if (reportMode) 
      { 
       writeReport(totaltext, file); 
      }     
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error loading doc. " + ex.Message); 
     } 
    } 
+0

あなたはOpenXMLを検討しましたか?これにより、単語を開いてタスクマネージャを満たす必要がなくなります。 –

+0

いいえ、でも見ていきます....ありがとう –

答えて

0

次のワードを生成する前に、前のワードプロセスが終了するのを待ってください。

参照:https://stackoverflow.com/a/19577783/563088

それは本当に近く、以前のものは、彼らが同時に同じテンプレートをロードされる可能性があります閉じ前にループは、次のWordのプロセスを開始した場合Wordのプロセスに時間がかかる場合があります。

0

OpenXML(docファイルが正しいファイル形式で保存されている場合)を使用することをお勧めします。タスクマネージャーの問題を解決し、並列処理をより簡単に使用できます。

word.NormalTemplate.Saved = true; 

0

次のコード行は、最終的に状況を改善する助けました。

private void readWordDoc(bool reportMode, string file) 
    { 
     try 
     { 
      Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); 
      object miss = System.Reflection.Missing.Value; 

      object path = @file; 
      object readOnly = true; 
      Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss); 
      string totaltext = ""; 
      for (int i = 0; i < docs.Paragraphs.Count; i++) 
      { 
       totaltext += "\n" + docs.Paragraphs[i + 1].Range.Text.ToString(); 
      } 
      docs.Close(); 
      word.NormalTemplate.Saved = true; 
      word.Quit(); 

      if (!reportMode) 
      { 
       rtxtDocViewer.Text = totaltext; 
      } 

      if (reportMode) 
      { 
       writeReport(totaltext, file); 
      }     
     } 
     catch (Exception ex) 
     { 
      //MessageBox.Show("Error loading doc. " + ex.Message); 
     } 
    }