using (WordprocessingDocument wordDoc =
WordprocessingDocument.Open(document, true))
{
string docText = null;
using (StreamReader sr =
new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
docText = sr.ReadToEnd();
}
Regex regexText = new Regex("@@username@@");
docText = regexText.Replace(docText, "john thomas ");
using (StreamWriter sw =
new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
}
}
这应该用代码中的名称替换doctext上的匹配项。我检查了doctext,并将要替换的单词(@@username@@
)拆分。有时之间有XML内容
@@
和username@@
。有时这个词本身就是畸形的。
如何替换@@username@@
?
答案 0 :(得分:0)
一个简单的解决方法是将标记放在文本框或表格中(甚至可能使用预先指定的标识)。我不确定文档中是否有其他表格或文本框,但抓住表格中的内容或文档中唯一的文本框内的文本框非常简单。
答案 1 :(得分:0)
如果你在Paragraph对象中有代码,那么你可以做这样的事情(一个糟糕的Order n ^ 2解决方案....):
foreach (Paragraph para in wordprocessingDocument.MainDocumentPart.Document.Descendants<Paragraph>())
{
foreach(Run r in para.Elements<Run>())
{
if (r.Elements<text>().ElementAt(0).Text.Equals(string_to_search))
r.Elements<Text>().ElementAt(0).Text = string_to_insert;
}
}
另外,请查看MSDN http://msdn.microsoft.com/en-us/library/office/ff478255.aspx
答案 2 :(得分:0)
你可以改变正则表达式。 (这将包括所有XML,但它将被替换)
New Regex("@@.*?username.*?@@")
操作代码是MSDN上记录的解决方案: https://msdn.microsoft.com/en-us/library/office/bb508261.aspx
如果要用不同的名称替换多个字段,可以尝试在读者和作者之间调用此函数:
Private Function ReplaceMatches(ByVal text As String) As String
Dim Matches = Regex.Matches(text, "@@.*?@@")
For Each m As Match In Matches
For Each c As Capture In m.Captures
If Not String.IsNullOrEmpty(c.Value) Then
text = text.Replace(c.Value, "NEW-VALUE")
End If
Next
Next
Return text
End Function