2010-08-27 77 views
0

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 &quot;SalutationName&quot; "> 
    <w:r> 
     <w:rPr> 
     <w:noProof/> 
     </w:rPr> 
     <w:t>«SalutationName»</w:t> 
    </w:r> 
    </w:fldSimple> 
</w:p> 

实际的错误,我得到的是“文件无法打开,因为有问题与内容”。如果我不写邮件合并领域,加载文档,然后插入邮件合并领域,它的工作原理。所以实际的邮件合并是正确的,只是邮件合并字段不正确。 (请参阅我的引用文章,了解如何获取邮件合并)。

对此有何意见?

干杯

回答

0

我看到的是你正在更换它错误。你把你正在创建AW里面的新的XML:T标记是一个文本标签,如果我没有记错的话”

跳过体创作,并与m.Values父母的innerXml取代该段p的InnerXml 。

这就是,如果我正确理解这一点。