C# 操作Word書簽(二)——插入圖片、表格到書簽;讀取、替換書簽


概要

書簽的設置可以幫助我們快速的定位某段文字,使用起來很方便,也很節省時間。在前一篇文章“C# 如何添加/刪除Word書簽”中介紹了插入、刪除書簽的方法,本篇文章將對C# 操作Word書簽的功能做進一步介紹。示例內容將包含以下要點:

  • 在現有書簽位置插入圖片
  • 在現有書簽位置插入表格
  • 讀取書簽位置的文檔內容
  • 替換現有書簽位置內容

 

使用工具

ps:下載安裝該類庫后,注意添加引用Spire.Doc.dl到項目程序,dll文件可在安裝路徑的Bin文件夾中獲取。

示例代碼(供參考)

測試文檔如下:

 

 

【示例1】 在現有書簽位置插入圖片

步驟 1: 添加using指令

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

步驟 2 :主要代碼段

//創建實例,加載文檔
Document document = new Document();
document.LoadFromFile("test.docx");

//實例化BookmarksNavigator類,指定需要添加圖片的書簽“Bookmark1”
BookmarksNavigator bn = new BookmarksNavigator(document);
bn.MoveToBookmark("Bookmark1", true, true);

//添加段落,加載圖片並插入到段落
Section section0 = document.AddSection();
Paragraph paragraph = section0.AddParagraph();
Image image = Image.FromFile("img.png");
DocPicture picture = paragraph.AppendPicture(image);
bn.InsertParagraph(paragraph);
document.Sections.Remove(section0);

//保存文檔並打開
string output = "result.docx";
document.SaveToFile(output, FileFormat.Docx);
System.Diagnostics.Process.Start(output);

圖片插入效果:

 

全部代碼:

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

namespace InsertImgToBookmark_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //創建實例,加載文檔
            Document document = new Document();
            document.LoadFromFile("test.docx");

            //實例化BookmarksNavigator類,指定需要添加圖片的書簽“Bookmark1”
            BookmarksNavigator bn = new BookmarksNavigator(document);
            bn.MoveToBookmark("Bookmark1", true, true);

            //添加段落,加載圖片並插入到段落
            Section section0 = document.AddSection();
            Paragraph paragraph = section0.AddParagraph();
            Image image = Image.FromFile("img.png");
            DocPicture picture = paragraph.AppendPicture(image);
            bn.InsertParagraph(paragraph);
            document.Sections.Remove(section0);

            //保存文檔並打開
            string output = "result.docx";
            document.SaveToFile(output, FileFormat.Docx);
            System.Diagnostics.Process.Start(output);
        }
    }
}
View Code

 

 【示例 2】在現有書簽位置插入表格

步驟 1:添加using指令

using Spire.Doc;
using Spire.Doc.Documents;
using System.Data;

步驟 2 :創建文檔,加載文件

Document doc = new Document();
doc.LoadFromFile("test.docx");

步驟 3 :創建表格

//創建Table對象
Table table = new Table(doc, true);

//創建模擬數據
DataTable dt = new DataTable();
dt.Columns.Add("PI", typeof(string));
dt.Columns.Add("Type", typeof(string));
dt.Columns.Add("Nov.", typeof(string));
dt.Columns.Add("YTD", typeof(string));                     
dt.Rows.Add(new string[] { "PI","Type", "Nov.", "YTD" });
dt.Rows.Add(new string[] { "1", "BAIC EC-Series", "15.719", "64.910" });
dt.Rows.Add(new string[] { "2", "Tesla Model S", "3.889", "46.951" });
dt.Rows.Add(new string[] { "3", "Nissan Leaf", "2.817", "46.423" });

//將數據填充至表格
table.ResetCells(dt.Rows.Count, dt.Columns.Count);
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        table.Rows[i].Cells[j].AddParagraph().AppendText(dt.Rows[i][j].ToString());
    }
}

步驟 4 :插入表格到書簽位置

//獲取指定書簽位置
BookmarksNavigator navigator = new BookmarksNavigator(doc);
navigator.MoveToBookmark("origin2");

//將表格添加至TextBodyPart
TextBodyPart part = navigator.GetBookmarkContent();
part.BodyItems.Add(table);
//替換原有書簽內容
navigator.ReplaceBookmarkContent(part);

步驟 5 :保存文件

//保存並打開文件
doc.SaveToFile("output.docx", FileFormat.Docx2013);
System.Diagnostics.Process.Start("output.docx");

 

 表格插入效果:

全部代碼:

using Spire.Doc;
using Spire.Doc.Documents;
using System.Data;

namespace InsertTableToBookmark_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //創建文檔,加載文件
            Document doc = new Document();
            doc.LoadFromFile("test.docx");

            //創建Table對象
            Table table = new Table(doc, true);

            //創建模擬數據
            DataTable dt = new DataTable();
            dt.Columns.Add("PI", typeof(string));
            dt.Columns.Add("Type", typeof(string));
            dt.Columns.Add("Nov.", typeof(string));
            dt.Columns.Add("YTD", typeof(string));                     
            dt.Rows.Add(new string[] { "PI","Type", "Nov.", "YTD" });
            dt.Rows.Add(new string[] { "1", "BAIC EC-Series", "15.719", "64.910" });
            dt.Rows.Add(new string[] { "2", "Tesla Model S", "3.889", "46.951" });
            dt.Rows.Add(new string[] { "3", "Nissan Leaf", "2.817", "46.423" });

            //將數據填充至表格
            table.ResetCells(dt.Rows.Count, dt.Columns.Count);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    table.Rows[i].Cells[j].AddParagraph().AppendText(dt.Rows[i][j].ToString());
                }
            }

            //獲取指定書簽位置
            BookmarksNavigator navigator = new BookmarksNavigator(doc);
            navigator.MoveToBookmark("origin2");

            //將表格添加至TextBodyPart
            TextBodyPart part = navigator.GetBookmarkContent();
            part.BodyItems.Add(table);

            //替換書簽內容
            navigator.ReplaceBookmarkContent(part);

            //保存並打開文件
            doc.SaveToFile("output.docx", FileFormat.Docx2013);
            System.Diagnostics.Process.Start("output.docx");
        }
    }
}
View Code

 

【示例3】讀取書簽位置的內容

步驟 1 :添加using指令

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;

步驟 2 :獲取書簽位置的內容

//初始化BookmarkNavigator類對象
BookmarksNavigator navigator = new BookmarksNavigator(doc);
//定位到指定書簽位置,獲取書簽位置的文檔內容
navigator.MoveToBookmark("bookmark1");
TextBodyPart textBodyPart = navigator.GetBookmarkContent();

步驟 3 :讀取書簽內容

//遍歷書簽內容中的子項目,並將文本信息提取至string類型變量中
string text = null;
foreach (var item in textBodyPart.BodyItems)
{
    if (item is Paragraph)
    {
        foreach (var childObject in (item as Paragraph).ChildObjects)
        {
            if (childObject is TextRange)
            {
                text += (childObject as TextRange).Text;
            }
        }
    }
}
//控制台輸出文本
Console.WriteLine(text);
Console.ReadLine();

 

 讀取結果:

全部代碼:

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;

namespace GetTextOfBookmark_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //實例化Document類,加載測試文檔
            Document doc = new Document();
            doc.LoadFromFile("test.docx");

            //初始化BookmarkNavigator類對象
            BookmarksNavigator navigator = new BookmarksNavigator(doc);
            //定位到指定書簽位置,獲取書簽位置的文檔內容
            navigator.MoveToBookmark("bookmark1");
            TextBodyPart textBodyPart = navigator.GetBookmarkContent();

            //遍歷書簽內容中的子項目,並將文本信息提取至string類型變量中
            string text = null;
            foreach (var item in textBodyPart.BodyItems)
            {
                if (item is Paragraph)
                {
                    foreach (var childObject in (item as Paragraph).ChildObjects)
                    {
                        if (childObject is TextRange)
                        {
                            text += (childObject as TextRange).Text;
                        }
                    }
                }
            }
            //控制台輸出文本
            Console.WriteLine(text);
            Console.ReadLine();
        }
    }
}
View Code

 

【示例4】替換現有書簽內容

步驟 1 :添加using指令

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

步驟 2 :加載文檔

Document document = new Document();
document.LoadFromFile("test.docx");

步驟 3 :添加段落及文字

Section sec = document.AddSection();//添加section
sec.AddParagraph().AppendText("Welcome Back, \n My Friend!"); //添加段落到section,並添加字符串內容

步驟 4 :獲取段落

//獲取段落內容 
ParagraphBase firstReplacementParagraph = sec.Paragraphs[0].Items.FirstItem as ParagraphBase;
ParagraphBase lastReplacementParagraph = sec.Paragraphs[sec.Paragraphs.Count - 1].Items.LastItem as ParagraphBase;
//實例化類TextBodySelection和TextBodyPart
TextBodySelection selection = new TextBodySelection(firstReplacementParagraph, lastReplacementParagraph);
TextBodyPart part = new TextBodyPart(selection);

步驟 5 :替換書簽內容

BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);//實例化BookmarksNavigator類 
bookmarkNavigator.MoveToBookmark("bookmark1", true, true);//定位到書簽“bookmark1”所在段落的位置
bookmarkNavigator.DeleteBookmarkContent(true);//刪除原有書簽位置的內容
bookmarkNavigator.ReplaceBookmarkContent(part, true, true);//用新添加段落的內容替換掉原書簽的內容並保留格式
document.Sections.Remove(sec); //移除section

步驟 6 :保存文檔

//保存文檔並打開
document.SaveToFile("替換書簽.docx");
System.Diagnostics.Process.Start("替換書簽.docx");

 

替換效果:

全部代碼:

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace EditOrReplaceBookmark_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //創建Document類實例,加載文檔 
            Document document = new Document();
            document.LoadFromFile("test.docx");

            Section sec = document.AddSection();//添加section
            sec.AddParagraph().AppendText("Welcome Back, \n My Friend!"); //添加段落到section,並添加字符串內容

            //獲取段落內容 
            ParagraphBase firstReplacementParagraph = sec.Paragraphs[0].Items.FirstItem as ParagraphBase;
            ParagraphBase lastReplacementParagraph = sec.Paragraphs[sec.Paragraphs.Count - 1].Items.LastItem as ParagraphBase;
            //實例化類TextBodySelection和TextBodyPart
            TextBodySelection selection = new TextBodySelection(firstReplacementParagraph, lastReplacementParagraph);
            TextBodyPart part = new TextBodyPart(selection);

            BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);//實例化BookmarksNavigator類 
            bookmarkNavigator.MoveToBookmark("bookmark1", true, true);//定位到書簽“bookmark1”所在段落的位置
            bookmarkNavigator.DeleteBookmarkContent(true);//刪除原有書簽位置的內容
            bookmarkNavigator.ReplaceBookmarkContent(part, true, true);//用新添加段落的內容替換掉原書簽的內容並保留格式            
            document.Sections.Remove(sec); //移除section

            //保存文檔並打開
            document.SaveToFile("替換書簽.docx");
            System.Diagnostics.Process.Start("替換書簽.docx");
        }
    }
}
View Code

 

以上是本次關於C# 操作Word書簽功能的補充介紹,如需轉載,請注明出處。

(本文完)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM