• C# 读取Word内容控件


    在Word中,借助内容控件,可设计出具有特定功能的文档或模板。以下表格中简单介绍了几种常用的内容控件:

    名称

    下拉列表内容控件

    下拉列表包含了一个预先定义好的列表。和组合框不同的是下拉列表不允许用户编辑项。

    纯文本内容控件

    纯文本内容控件只能包含文本,不能包含其他项,例如表格、图片或其他内容控件。

    富文本内容控件

    与纯文本内容控件不同,富文本内容控件可以包含除文本以外的其他项,例如表格、图片或其他内容控件。

    日期选取器内容控件

    日期选取器内容控件包含一个日历控件,用于帮助用户输入日期。

    组合框内容控件

    组合框控件包含一个可以直接编辑的列表。它结合了文本框和下拉列表的属性,用户可以在框中键入值或者从下拉列表中选择值。

    图片内容控件

    图片内容控件用于显示图片。用户可以在制作模板时指定图片,也可以通过单击此控件来选择需要插入的图片。

    本篇文章将介绍通过C#程序获取Word中已有的内容控件的方法。在Word中添加内容控件,请参考这篇文章

    使用工具:Spire.Doc for .NET

    dll文件获取及导入:

    方法1:通过官网下载dll文件包。下载后,解压安装。完成安装后,注意在vs程序中添加引用Spire.Doc.dll程序集文件。如下图:

    方法2:可通过Nuget网站下载。

     

    C# 示例代码(供参考):

    测试文档如下:

    using Spire.Doc;
    using Spire.Doc.Documents;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace GetSDT
    {
        class Program
        {
            static void Main(string[] args)
            {
                //加载含有内容控件的文档
                Document document = new Document();
                document.LoadFromFile("test.docx");
    
                //调用StructureTags类获取内容控件列表
                StructureTags structureTags = GetAllTags(document);
                List<StructureDocumentTagInline> tagInlines = structureTags.tagInlines;
    
                //获取内容控件属性并输出到控制台
                for (int i = 0; i < tagInlines.Count; i++)
                {
                    string alias = tagInlines[i].SDTProperties.Alias;
                    string tag = tagInlines[i].SDTProperties.Tag;
                    string value = tagInlines[i].SDTContent.Text;
                    Console.WriteLine(alias);
                    Console.WriteLine(tag);
                    Console.WriteLine(value);
                    Console.WriteLine("_____________________");
               
                }
                Console.ReadLine();            
            }
            static StructureTags GetAllTags(Document document)
            {
                //遍历文档并获取所有的内容控件
                StructureTags structureTags = new StructureTags();
                foreach (Section section in document.Sections)
                {
                    foreach (DocumentObject obj in section.Body.ChildObjects)
                    {
                        if (obj.DocumentObjectType == DocumentObjectType.Paragraph)
                        {
                            foreach (DocumentObject pobj in (obj as Paragraph).ChildObjects)
                            {
                                if (pobj.DocumentObjectType == DocumentObjectType.StructureDocumentTagInline)
                                {
                                    structureTags.tagInlines.Add(pobj as StructureDocumentTagInline);
                                }
                            }
                        }
                    }
                }
                return structureTags;
            }
            public class StructureTags
            {
                List<StructureDocumentTagInline> m_tagInlines;
                public List<StructureDocumentTagInline> tagInlines
                {
                    get
                    {
                        if (m_tagInlines == null)
                            m_tagInlines = new List<StructureDocumentTagInline>();
                        return m_tagInlines;
                    }
                    set
                    {
                        m_tagInlines = value;
                    }
                }
            }
        }
    }

    内容控件读取效果:

     

    (本文完)

  • 相关阅读:
    String、Stringbuilder、StringBuffer之间的练习与区别
    JAVA——重点非阻塞模型:NIO模型及IO操作步骤
    JAVA——IO模型分类
    SpringBoot(六) SpringBoot使用汇总(持续更新)
    Java高级(一) Future机制
    SpringBoot(二) 事务
    Java8(七) 新的DateTime API
    Java8(六) Optional
    Java8(五) 接口默认方法
    Java8(四) StreamAPI
  • 原文地址:https://www.cnblogs.com/Yesi/p/11428831.html
Copyright © 2020-2023  润新知