Ms word 打开XML-格式不正确

Ms word 打开XML-格式不正确,ms-word,openxml,Ms Word,Openxml,与此相关,我一直在大量使用Word的开放XML和可用的库。大多数人似乎不知道的是,在编程处理Word的开放XML格式方面有一些很好的方法(我不是指手动将XML写入文件流!) 我的问题是关于我正在做的事情。基本上,我是手动创建邮件合并。现在,邮件合并实际上可以很好地工作,但是,不可以很好地工作的是将邮件合并字段放在文档中。这就是我正在做的: string mergeFieldName = m.Value.Replace("[", string.Empty).Replace("]", string.

与此相关,我一直在大量使用Word的开放XML和可用的库。大多数人似乎不知道的是,在编程处理Word的开放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>

«称呼名称»
我得到的实际错误是“文件无法打开,因为内容有问题”。如果我不写出邮件合并字段,加载文档,然后插入邮件合并字段,它就可以工作了。所以实际的邮件合并是正确的,只是邮件合并字段不正确。(有关如何将邮件合并出去的信息,请参阅我的参考文章)

关于这个有什么想法吗


干杯我看到的是你换错了。您将要创建的新XML放在一个w:t标记中,如果我没有弄错的话,这是一个文本标记'

跳过正文创建,并将段落p的InnerXml替换为m.Values父级的InnerXml

如果我理解正确的话