2017-03-21 11 views
1

OpenXMLとEric WhiteのOpenXmlPowerTools(NuGetからインストール)を使用して、.docx単語文書の基本検索と置換を試みています。私はこのサイトと彼のブログの例を辿ってきましたが、何らかの理由でコードを実行した後にドキュメントを開いたときに変更がドキュメントに表示されることはありません。ここで私が実行している簡単な関数である:c#OpenXMLで保存できないテキストの検索と置換

void ReadDocument(string path) 
{ 
    using (WordprocessingDocument doc = WordprocessingDocument.Open(path, true)) 
    { 
     var content = doc.MainDocumentPart.GetXDocument().Descendants(W.p); 
     var regex = new Regex(@"the", RegexOptions.IgnoreCase); 
     int count = OpenXmlRegex.Replace(content, regex, "NewText", null); 
     doc.MainDocumentPart.Document.Save(); 
     doc.Save(); 
     MessageBox.Show(count.ToString()); 
    } 
} 

は、メッセージボックスには、私は何の代替品を見ていない文書を開くと、それはまだ、作っているはず置換の大きな数を示しています。また、私はそれらのdocument.Save()呼び出しが必要ではないと思うが、私はこのことを動作させるために何かを試みてきた。助言がありますか?おかげ

答えて

0

私は非常に運良くOpenXmlRegexユーチューブ動画(https://youtu.be/rDGL-i5zRdk?t=18m52s)に18:52で答えを偶然見つけ..私はのためにMainDocumentPartにこのPutXDocument()メソッドを呼び出す必要があります(私がやろうとしていたdoc.Save()の代わりに)変更が反映されました。

doc.MainDocumentPart.PutXDocument(); 
0

は、このアプローチを試してみてください:

 using (WordprocessingDocument doc = WordprocessingDocument.Open(@"filePath", true)) 
     { 
      string docText = null; 
      using (StreamReader sr = new StreamReader(doc.MainDocumentPart.GetStream())) 
      { 
       docText = sr.ReadToEnd(); 
      } 

      Regex regexText = new Regex(@"the", RegexOptions.IgnoreCase); 
      docText = regexText.Replace(docText, "New text"); 

      using (StreamWriter sw = new StreamWriter(doc.MainDocumentPart.GetStream(FileMode.Create))) 
      { 
       sw.Write(docText); 
      } 

      doc.MainDocumentPart.Document.Save();    
     } 
+0

ありがとうございます。これでいくつかの編集が正常に行われ、ファイルが保存され、Wordを開くと変更が表示されますが、xmlの複数の実行にまたがるテキストでは機能しません。これがOpenXmlPowerToolsを使用しようとしている最初の問題です。OpenXmlPowerToolsは、複数の実行にまたがるテキストのテキスト検索を行うことができます。あなたのアプローチは、私はこの質問の受け入れられた答えに基づいて試した他のものと違っていません:http://stackoverflow.com/questions/28697701/openxml-tag-search –

関連する問題