C# 如何用多个字段替换word模板中的节C

C# 如何用多个字段替换word模板中的节C,c#,ms-word,office-interop,mergefield,C#,Ms Word,Office Interop,Mergefield,我正在创建一个C应用程序,用外部数据源的数据填充MS Word文档上定义的合并字段 我使用的是OpenXMLSDK,当替换单个字段时,一切正常 我想做的是,定义一个包含多个合并字段的节,并能够根据输入数据多次复制这样的节 e、 g。 我可以在文档中包含一个段落,其中包含带有多个合并字段的产品信息,但在我拥有多个产品信息的数据中,我希望在输出文档中生成与输入数据中的产品数量相同的段落 产品:[[产品名称]],金额:[[产品金额]],价格:[[产品价格]] Word文档中是否有类似逻辑部分的内容来包

我正在创建一个C应用程序,用外部数据源的数据填充MS Word文档上定义的合并字段

我使用的是OpenXMLSDK,当替换单个字段时,一切正常

我想做的是,定义一个包含多个合并字段的节,并能够根据输入数据多次复制这样的节

e、 g。 我可以在文档中包含一个段落,其中包含带有多个合并字段的产品信息,但在我拥有多个产品信息的数据中,我希望在输出文档中生成与输入数据中的产品数量相同的段落

产品:[[产品名称]],金额:[[产品金额]],价格:[[产品价格]]


Word文档中是否有类似逻辑部分的内容来包装段落?如果没有,您的建议是什么?

您可以尝试在每行上单独运行“合并”,然后将结果连接到一个文档中。下面是连接多个文档的示例方法。在本例中,我使用Break元素来分隔,但这不是必须的

        private MemoryStream JoinDocuments(List<MemoryStream> subDocuments)
    {
            var sumLength = (from MemoryStream ms in subDocuments select ms.Length).Sum();
            MemoryStream mainDocumentStream = new MemoryStream((int)sumLength);

          // Create a Wordprocessing document.
          using (WordprocessingDocument myDoc = WordprocessingDocument.Create(mainDocumentStream, WordprocessingDocumentType.Document))
          {
            // Add a new main document part.
            MainDocumentPart mainPart = myDoc.AddMainDocumentPart();
            //Create Document tree for simple document.
            mainPart.Document = new Document();
            //Create Body (this element contains other elements that we want to include
            Body body = new Body();

            for (int i = 0; i < subDocuments.Count; i++)
            {
                var subDocument = subDocuments[i];
                subDocument.Position = 0;
                string altChunkId = "AltChunkId" + i;
                AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
                chunk.FeedData(subDocument);

                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;
                body.Append(altChunk);
                Break pageBreak = new Break();
                pageBreak.Type = BreakValues.Page;
                body.Append(pageBreak);

            }

            mainPart.Document.Append(body);
            // Save changes to the main document part.
            mainPart.Document.Save();
          }
          return mainDocumentStream;
    }