欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 读取Word内容控件

程序员文章站 2022-08-08 18:56:30
在Word中,借助内容控件,可设计出具有特定功能的文档或模板。以下表格中简单介绍了几种常用的内容控件: 名称 简介 下拉列表内容控件 下拉列表包含了一个预先定义好的列表。和组合框不同的是下拉列表不允许用户编辑项。 纯文本内容控件 纯文本内容控件只能包含文本,不能包含其他项,例如表格、图片或其他内容控 ......

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

名称

下拉列表内容控件

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

纯文本内容控件

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

富文本内容控件

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

日期选取器内容控件

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

组合框内容控件

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

图片内容控件

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

使用工具:spire.doc for .net

dll文件获取及导入:

方法1:通过官网下载dll文件包。下载后,解压安装。完成安装后,注意在vs程序中添加引用spire.doc.dll程序集文件。如下图:
C# 读取Word内容控件

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

 

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

测试文档如下:

C# 读取Word内容控件

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;
                }
            }
        }
    }
}

内容控件读取效果:

C# 读取Word内容控件 

 

(本文完)