C# 获取Word内容控件
原创
©著作权归作者所有:来自51CTO博客作者成都冰蓝科技的原创作品,请联系作者获取转载授权,否则将追究法律责任
在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;
}
}
}
}
}
测试文档:
读取效果:
(本文完)