与this post有关,我一直在大量使用Word的Open XML和可用的库。大多数人似乎都不知道的是,有一些很好的resources用于编程式地处理Word的Open XML格式(并且我不是指手动将XML写入文件流!)。开放式XML - 错误格式
我的问题是关于我正在做的事情。基本上,我手动创建邮件合并。现在,邮件合并实际上可以正常工作,但是,不能正常工作的是将邮件合并域放在文档中。这是我在做什么:
string mergeFieldName = m.Value.Replace("[", string.Empty).Replace("]", string.Empty);
Body body = new Body();
DocumentFormat.OpenXml.Wordprocessing.Paragraph p = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
SimpleField simpleField = new SimpleField() { Instruction = " MERGEFIELD " + mergeFieldName + " " };
Run run = new Run();
RunProperties runProperties = new RunProperties();
NoProof noProof = new NoProof();
runProperties.Append(noProof);
Text text = new Text("«" + mergeFieldName + "»");
run.Append(runProperties);
run.Append(text);
simpleField.Append(run);
p.Append(simpleField);
body.Append(p);
docXml.InnerXml = docXml.InnerXml.Replace(m.Value, body.InnerXml);
变量m
实际上是基于方括号内我的正则表达式匹配一切Match
对象。 (你也许会奇怪,为什么我这样做像我 - 这不是在这里有关)
我的问题是生成的XML是无效的,因为我有以下几点:
<w:p w:rsidR="00945DC1" w:rsidRDefault="006878CA">
<w:r>
<w:t xml:space="preserve">
<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:fldSimple w:instr=" MERGEFIELD FullName ">
<w:r>
<w:rPr>
<w:noProof />
</w:rPr>
<w:t>«FullName»</w:t>
</w:r>
</w:fldSimple>
</w:p>
</w:t>
</w:r>
</w:p>
而且这里有一个例子从手工创建的文档工作XML:
<w:p w:rsidR="001B2242" w:rsidRDefault="001B2242">
<w:r>
<w:tab/>
</w:r>
<w:fldSimple w:instr=" MERGEFIELD "SalutationName" ">
<w:r>
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>«SalutationName»</w:t>
</w:r>
</w:fldSimple>
</w:p>
实际的错误,我得到的是“文件无法打开,因为有问题与内容”。如果我不写邮件合并领域,加载文档,然后插入邮件合并领域,它的工作原理。所以实际的邮件合并是正确的,只是邮件合并字段不正确。 (请参阅我的引用文章,了解如何获取邮件合并)。
对此有何意见?
干杯