2
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@@

4

3 回答 3

0

一个简单的解决方法是将标签放在文本框或表格中(甚至可能带有预先指定的 id)。我不确定文档中是否还有其他表格或文本框,但是获取表格中的内容或文档中唯一的文本框内的内容真的很容易。

于 2012-05-10T16:54:24.790 回答
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

于 2014-02-09T05:12:46.487 回答
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
于 2015-06-26T20:44:34.823 回答