代码之家  ›  专栏  ›  技术社区  ›  Bohdan

替换docx文档中的文本

  •  0
  • Bohdan  · 技术社区  · 2 年前

    我正在使用 OpenXml 替换中的文本 docx 文档通过我的C#代码。出于这个原因,我使用 SearchAndReplace 来自的方法 https://learn.microsoft.com/en-us/office/open-xml/how-to-search-and-replace-text-in-a-document-part 这里的方法代码是:

    // To search and replace content in a document part.
        public static void SearchAndReplace(string document)
        {
            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("{{Number}}");
                docText = regexText.Replace(docText, "12345");
    
                using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
                {
                    sw.Write(docText);
                }
            }
        }
    

    在测试阶段,我注意到提到的代码有时能正常工作,有时却不能。经过深入调查,我发现原因在于 docx 文件例如,我有两个 docx 文件,两者都有 {{Number}} 文本更重要的是,如果通过MS Office Word打开,这些文档看起来完全相同。但是文本内部存储的方式 document.xml 不同。以下是 document.xml 对于两者 docx 文档:

    document.xml 对于 MyWordDoc1.docx :

    <w:p w14:paraId="0C2491BB" w14:textId="56E92F22" w:rsidR="001C522D" w:rsidRDefault="00D570B1">
                <w:r>
                    <w:t>{{</w:t>
                </w:r>
                <w:r w:rsidR="00B908ED">
                    <w:t>Number</w:t>
                </w:r>
                <w:r>
                    <w:t>}}</w:t>
                </w:r>
            </w:p>
    

    document.xml 对于 MyWordDoc2.docx :

    <w:p w14:paraId="099057D3" w14:textId="56FD88C8" w:rsidR="00465234" w:rsidRDefault="00773DCC">
                <w:r>
                    <w:t>{{Number}}</w:t>
                </w:r>
            </w:p>
    

    正如你所看到的 MyWordDoc1.docx {{数字}} 正文分为不同的部分。

    有人能解释一下如何验证吗 document.xml 那几个文本部分是同一个单词的部分 docx 文档以及如何更新提到的C#方法以确保替换操作正确工作。

    0 回复  |  直到 2 年前