如何使用Open XML SDK将文本插入内容控件

布莱恩·雅各布

我正在尝试开发一种解决方案,该解决方案从ASP.Net网页获取输入,并将输入值嵌入到MS Word文档中的相应内容控件中。MS Word文档还获得了带有一些动态数据的静态数据,这些数据将嵌入到“页眉”和“页脚”字段中。

这里的想法是该解决方案应该基于Web。我可以为此目的使用OpenXML还是可以建议其他任何方法。

预先非常感谢您提供的所有宝贵意见。我真的很感激他们。

亚历山大·德克(Alexander Derck)

我的项目中有一些代码示例,可以在您在Word文档中创建的内容控件中插入一些单词:

public static WordprocessingDocument InsertText(this WordprocessingDocument doc, string contentControlTag, string text)
{
    SdtElement element = doc.MainDocumentPart.Document.Body.Descendants<SdtElement>()
      .FirstOrDefault(sdt => sdt.SdtProperties.GetFirstChild<Tag>()?.Val == contentControlTag);

    if (element == null)
      throw new ArgumentException($"ContentControlTag \"{contentControlTag}\" doesn't exist.");

    element.Descendants<Text>().First().Text = text;
    element.Descendants<Text>().Skip(1).ToList().ForEach(t => t.Remove());

    return doc;
}

它只是简单地在文档中查找具有特定内容的第一个contentcontrol Tag(您可以通过在文字控件中启用设计器模式并右键单击内容控件来进行设置),然后用传递给该方法的文本替换当前文本。此后,该文档当然仍将包含可能不需要的内容控件。因此,当我完成文档编辑后,我运行以下方法来摆脱内容控件:

internal static WordprocessingDocument RemoveSdtBlocks(this WordprocessingDocument doc, IEnumerable<string> contentBlocks)
{
    List<SdtElement> SdtBlocks = doc.MainDocumentPart.Document.Descendants<SdtElement>().ToList();

    if (contentBlocks == null)
        return doc;

    foreach(var s in contentBlocks)
    {
        SdtElement currentElement = SdtBlocks.FirstOrDefault(sdt => sdt.SdtProperties.GetFirstChild<Tag>()?.Val == s);
        if (currentElement == null)
            continue;
        IEnumerable<OpenXmlElement> elements = null;

        if (currentElement is SdtBlock)
            elements = (currentElement as SdtBlock).SdtContentBlock.Elements();
        else if (currentElement is SdtCell)
            elements = (currentElement as SdtCell).SdtContentCell.Elements();
        else if (currentElement is SdtRun)
            elements = (currentElement as SdtRun).SdtContentRun.Elements();

        foreach (var el in elements)
            currentElement.InsertBeforeSelf(el.CloneNode(true));
        currentElement.Remove();
    }
    return doc;
}

要从WordProcessingDocument模板打开并对其进行编辑,可以在线获取大量信息。

编辑:

在内存流中打开/保存文档时,很少有示例代码可以打开/保存文档,当然,您应该使用一个额外的存储库类来解决此问题,该类可以用实际代码管理文档:

byte[] byteArray = File.ReadAllBytes(@"C:\...\Template.dotx");

using (var stream = new MemoryStream())
{
    stream.Write(byteArray, 0, byteArray.Length);

    using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, true))
    {
       //Needed because I'm working with template dotx file, 
       //remove this if the template is a normal docx. 
        doc.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
        doc.InsertText("contentControlName","testtesttesttest");
    }
    using (FileStream fs = new FileStream(@"C:\...\newFile.docx", FileMode.Create))
    {
       stream.WriteTo(fs);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 Open XML SDK 在 PPTx 中插入视频?

来自分类Dev

如何指定不使用Open XML SDK包装Word TableCell?

来自分类Dev

使用Open XML SDK检索内容控件时出现问题

来自分类Dev

如何使用php将xml插入mysql

来自分类Dev

如何使用Open XML SDK在.xlsx文件的现有行中添加新单元格?

来自分类Dev

如何“标记” Word文档的区域,以使使用Open Office XML轻松向其中添加文本?

来自分类Dev

如何使用XML :: Writer perl插入XML

来自分类Dev

如何使用Open XML .net SDK将幻灯片编号添加到PowerPoint演示文稿中?

来自分类Dev

如何阻止访问内容控件 - 打开 xml

来自分类Dev

如何使用Node.js将插入内容流式传输到BigQuery?

来自分类Dev

如何使用PHP将XML内容插入mysql数据库

来自分类Dev

如何使用 Linq 打开 Open XML

来自分类Dev

如何使用etree.Element从xml条目中插入文本

来自分类Dev

使用多个产量插入内容

来自分类Dev

使用gzipstream将压缩的xml数据写入内存流

来自分类Dev

使用F#和Open XML SDK读取Excel文件中的单元格内容

来自分类Dev

使用Open XML SDK 2.0获取占位符值

来自分类Dev

无法使用Open XML SDK创建文档

来自分类Dev

使用Open XML SDK读取Excel图表模板(* .crtx)

来自分类Dev

在UWP中使用OPEN-XML SDK生成Doc文件

来自分类Dev

创建单词模板,并使用Open XML用代码替换内容控制文本

来自分类Dev

如何使用XQuery将元素插入当前的XML文档中?

来自分类Dev

如何正确地将文本插入内核的视频存储器?

来自分类Dev

插入图像会损坏Open XML SDK生成的Word文件

来自分类Dev

OPEN XML SDK无限循环

来自分类Dev

使用LINQ将XML数据插入现有XML

来自分类Dev

如何将XML插入SQL

来自分类Dev

如何将值插入xml标记

来自分类Dev

如何使用Nokogiri替换XML节点内容

Related 相关文章

  1. 1

    如何使用 Open XML SDK 在 PPTx 中插入视频?

  2. 2

    如何指定不使用Open XML SDK包装Word TableCell?

  3. 3

    使用Open XML SDK检索内容控件时出现问题

  4. 4

    如何使用php将xml插入mysql

  5. 5

    如何使用Open XML SDK在.xlsx文件的现有行中添加新单元格?

  6. 6

    如何“标记” Word文档的区域,以使使用Open Office XML轻松向其中添加文本?

  7. 7

    如何使用XML :: Writer perl插入XML

  8. 8

    如何使用Open XML .net SDK将幻灯片编号添加到PowerPoint演示文稿中?

  9. 9

    如何阻止访问内容控件 - 打开 xml

  10. 10

    如何使用Node.js将插入内容流式传输到BigQuery?

  11. 11

    如何使用PHP将XML内容插入mysql数据库

  12. 12

    如何使用 Linq 打开 Open XML

  13. 13

    如何使用etree.Element从xml条目中插入文本

  14. 14

    使用多个产量插入内容

  15. 15

    使用gzipstream将压缩的xml数据写入内存流

  16. 16

    使用F#和Open XML SDK读取Excel文件中的单元格内容

  17. 17

    使用Open XML SDK 2.0获取占位符值

  18. 18

    无法使用Open XML SDK创建文档

  19. 19

    使用Open XML SDK读取Excel图表模板(* .crtx)

  20. 20

    在UWP中使用OPEN-XML SDK生成Doc文件

  21. 21

    创建单词模板,并使用Open XML用代码替换内容控制文本

  22. 22

    如何使用XQuery将元素插入当前的XML文档中?

  23. 23

    如何正确地将文本插入内核的视频存储器?

  24. 24

    插入图像会损坏Open XML SDK生成的Word文件

  25. 25

    OPEN XML SDK无限循环

  26. 26

    使用LINQ将XML数据插入现有XML

  27. 27

    如何将XML插入SQL

  28. 28

    如何将值插入xml标记

  29. 29

    如何使用Nokogiri替换XML节点内容

热门标签

归档