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

測試文檔:

讀取效果:

 

(本文完)

轉載請註明出處!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章