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

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.*?@@")

ops コードは、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 に答える
0

簡単な回避策は、タグをテキストボックスまたはテーブルに配置することです (場合によっては、事前に指定された ID を使用することもできます)。ドキュメント内に他のテーブルやテキスト ボックスがあるかどうかはわかりませんが、ドキュメント内の唯一のテーブル内またはテキスト ボックス内にあるものを取得するのは非常に簡単です。

于 2012-05-10T16:54:24.790 に答える