我正在使用
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#方法以确保替换操作正确工作。