OpenXML
開いた単語ドキュメントを検索して置換しようとしていますMemoryStream
。
using (WordprocessingDocument _document = WordprocessingDocument.Open(_ms, true))
{
var placeHolder = _document.MainDocumentPart.Document
.Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>()
.Where(node => node.InnerText.Contains("***PlaceHolderText***"))
.FirstOrDefault();
placeHolder.InnerText.Replace("***PlaceHolderText***", "hello world!");
}
これは機能しません。理由はわかりませんが、この方法でドキュメントを操作しても、には影響がないようですMemoryStream
。
私はこのブログをEricWhiteが見つけましたが、それは似たようなことをしていますが、それでも完全には理解できません。彼はを使用しているXDocument
ので、私は次のようなものを持っています:
XDocument doc = _document.MainDocumentPart.GetXDocument(); // this is an extension method
var textNodes = doc.DescendantNodes().Where(n => n.NodeType == XmlNodeType.Text);
これにより、ドキュメント内で適切なノードが見つかりますが、問題は、テキストを変更する方法がわからないことです。私がこのSystem.Xml.Linq.XNodes
ようにしてしまうもの(私が本当に欲しいノードの代わりに)には、 orプロパティなどDocumentFormat.OpenXml.Wordprocessing.Text
がありません。ノードからテキストを取得したり、更新したりする方法がわかりません。ノードをキャストしようとしましたが、コンパイルされませんでした。InnerText
Value
私も正しい方向に進んでいますか?または、もっと簡単な方法はありますか?どんなポインタでも大歓迎です、ありがとう。