如何在OpenXML文档中搜索和替换所有出现的字符串

问题描述

我有一个.docx文档,其中包含我需要用值替换的子字符串。 我的问题是,通过.docx读取OpenXML文件内容时,单词会分成不同的Run / Text。 我只需要替换所有出现的子字符串。

给出一对键值[(k1,v1),(k2,v2),(k3,v3)]

Docx输入显示为字符串(不知道docx格式生成的xml元素)

"[k1]\t[k2]\n\t[k3]"

所需的输出

"[v1]\t[v2]\n\t[v3]"

像这样的文档的问题是我已经看到OpenXML[k1]截断为[,],k1]到不同的xml元素。

代码

private Stream ReplaceInDocx(Dictionary<string,string> map,Stream templateStream) {
            var memorystream = new MemoryStream();

            templateStream.Seek(0,SeekOrigin.Begin);
            using (WordprocessingDocument doc = WordprocessingDocument.Open(templateStream,true)) {

                using (StreamReader reader = new StreamReader(doc.MainDocumentPart.GetStream())) {
                    var payload = reader.ReadToEnd();

                    var result = Enumerable.Aggregate(map,payload,(acc,field) => acc.Replace($"[{field.Key}]",field.Value));
                    using (var writer = new StreamWriter(memorystream)) {
                        writer.Write(result);
                    }

                }
                memorystream.Seek(0,SeekOrigin.Begin);
                return memorystream;
            }
        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)