テキストボックスに関するその問題への追加については、この投稿の最後を見てください!
この方法では、ドキュメントを開き、一部のテキストを置き換えてから、そのままにしておきます。それは機能します、それは誇りに思うことです。:D
public static void replaceInOpenXMLDocument(string pfad, string zuErsetzen, string neuerString)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(pfad, true))
{
var res = from bm in doc.MainDocumentPart.Document.Body.Descendants()
where bm.InnerText != string.Empty && bm.InnerText.Contains(zuErsetzen) && bm.HasChildren == false
select bm;
foreach (var item in res)
{
item.InsertAfterSelf(new Text(item.InnerText.Replace(zuErsetzen, neuerString)));
item.Remove();
}
doc.Close();
}
}
ただし、特殊文字なしの置換でのみ機能します。例えば:
OSはWindows over 9000に置き換わる
【OS】はそのまま残します。
ケース 1:
ドキュメント内:
どんな目的でも os を使用します。
replaceInOpenXMLDocument("C:\NSA\suspects.docx", "os", "Win 2000");
これは次のようになります。
どんな目的でも Win 2000 を使用します。
ケース 2:
特殊文字で...
[os] は、どんな目的にも使用できます。
replaceInOpenXMLDocument("C:\NSA\suspects.docx", "[os]", "Win 2000");
...それは私を無視するだけです:
[os] は、どんな目的にも使用できます。
いくつかの特殊文字()[]{}などを試しましたが、置き換えられません。
やり忘れたことはありますか?それとも、この方法で特殊文字に置き換えることができないのでしょうか? もしそうなら、簡単な回避策が必要です。
私の絶望を助けてくれる人はいますか?:)
解決策 / 追加 1:
フラワーキングに感謝します!これは私が今使っているコードです:
public static void replaceInOpenXMLDocument(string pfad, string zuErsetzen, string neuerString)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(pfad, true))
{
SimplifyMarkupSettings settings = new SimplifyMarkupSettings
{
NormalizeXml = true, // Merges Run's in a paragraph with similar formatting
};
MarkupSimplifier.SimplifyMarkup(doc, settings);
//zuErsetzen = new XElement("Name", zuErsetzen).Value;
var res = from bm in doc.MainDocumentPart.Document.Body.Descendants()
where bm.InnerText != string.Empty && bm.InnerText.Contains(zuErsetzen) && bm.HasChildren == false
select bm;
// bm.InnerText.Contains(zuErsetzen)
foreach (var item in res)
{
item.InsertAfterSelf(new Text(item.InnerText.Replace(zuErsetzen, neuerString)));
item.Remove();
}
doc.Close();
}
}
(このコードは、通常のテキストを含む通常のドキュメントで機能します!)
解決策/追加 2: textboxesの テキストを置き換えたい場合は、少し回避策を講じる必要がありました。テキストボックスは画像として宣言されているため、上記のコードはそれに触れません。
テキストボックスでも検索する追加のクラス ( link ) を見つけました。ZIP ダウンロードには、理解しやすい例のプログラムが含まれています。