C#DocumentFormat OpenXML Word 2013重复内容控制

时间:2015-08-24 03:37:03

标签: c# .net ms-word openxml openxml-sdk

我创建了一个包含一系列内容控件的Word 2013文档。我在标题中有一堆文本控件,然后是一个具有重复内容控件和更多文本控件的表

我想要实现的是通过我的C#程序构建一些XML,我可以使用它来映射到我的内容控件。

我的XML看起来像这样

<Job>
     <JobNo>123</JobNo>
     <Staff>Chris Smith</Staff>
     <Client>Client 2</Client>
     <DateReceived>2015-05-08</DateReceived>
     <SampleNo>3</SampleNo>
     <Department>Product</Department>
     <Status>Open</Status>
     <JobSamples>
       <Sample>
          <SampleNo>1</SampleNo>
          <SampleIdentification>Identifier</SampleIdentification>
          <AnalyticalTest>AnalyticalTest</AnalyticalTest>
          <SampleMatrix>SampleMatrix</SampleMatrix>
          <TypeOfTest>TypeOfTest</TypeOfTest>
          <SampleStaff>SampleStaff</SampleStaff>
          <SampleDueDate>SampleDueDate</SampleDueDate>
      </Sample>
      <Sample>
          <SampleNo>2</SampleNo>
          <SampleIdentification>Identifier</SampleIdentification>
          <AnalyticalTest>AnalyticalTest</AnalyticalTest>
          <SampleMatrix>SampleMatrix</SampleMatrix>
          <TypeOfTest>TypeOfTest</TypeOfTest>
          <SampleStaff>SampleStaff</SampleStaff>
          <SampleDueDate>SampleDueDate</SampleDueDate>
      </Sample>
  </JobSamples>
</Job>

我创建了一个包含自定义XML部分并且已正确映射字段的单词模板。我的RepeatingContentControl已映射到节点并正确显示两行Samples数据

但是在运行时我的XML可能包含1 .... N个样本,所以我希望重复内容控制能够正确刷新

当我运行我的代码时,重复内容控件之外的所有其他控件都会刷新,但重复控件不会。

我是否需要处理代码中的重复内容控件并相应地添加或删除行?

如果是的话,我该怎么做?

如果没有,我怎样才能让我的重复控件刷新?

这是我的代码: -

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Job Sheet.docx");
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(path, true))
{
    // Creates and saves JobXML file
    CreateCustomXML(job);

    XmlDocument doc = new XmlDocument();
    doc.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "JobXML.xml"));

    MainDocumentPart mainPart = myDoc.MainDocumentPart;

    //delete old xml part
    mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);

    //add new xml part
    CustomXmlPart customXml = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
    using (StreamWriter ts = new StreamWriter(customXml.GetStream()))
    {
        ts.Write(doc.OuterXml);
    }   
}

0 个答案:

没有答案