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

来源:https://www.cnblogs.com/Yesi/archive/2018/07/19/9336062.html
-Advertisement-
Play Games

概要 書簽的設置可以幫助我們快速的定位某段文字,使用起來很方便,也很節省時間。在前一篇文章“C# 如何添加/刪除Word書簽”中介紹了插入、刪除書簽的方法,本篇文章將對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書簽功能的補充介紹,如需轉載,請註明出處。

(本文完)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載請註明出處:http://www.cnblogs.com/zhiyong-ITNote/ 官方網站:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/validation?view=aspnetcore-2.1 首先派生自Valida ...
  • 文本框顯示 文本框正常顯示: 文本框超出區域顯示: 實現方案 判斷文本框是否超出區域 請見《TextBlock IsTextTrimmed 判斷文本是否超出》 設置文本佈局顯示 1. FlowDirection 當文本超出顯示區域時,設置FlowDirection靠右顯示 下麵是封裝的附加屬性Scr ...
  • 工作中有這樣一個需求,有N張不同的報表,每張報表對應一個數據源,統計數據採用記憶體方式,首先在內在里定義了數據源對應實體。統計條件用lamdba表達式式實現,通過工具對單元格進行定義。在實現過程中針對每一張表來寫取數顯示是很Low的了,取數條件定義都是規則的,統計實現就是一段C#代碼,但是要針對不同的 ...
  • 起因:一臺伺服器中部署的程式,停電後未按照計劃任務正常啟動。 一、創建並配置Windows服務程式 開發工具VS2015 Framework版本2.0 1.新建Windows服務 2.在Service.cs中編寫服務程式所需要執行的操作 服務運行時會自動載入Service1中的代碼,亦有OnStar ...
  • 直接上乾貨簡單易懂 //磁碟監控(遠程/本地) //需要引用System.Management.dll public class RemoteMonitoring { private static string strMsg = ""; private static long freesize = ...
  • 在前文[基於.net core 微服務的另類實現]結尾處,提到瞭如何方便自動的生成微服務的客戶端代理,使對於調用方透明,同時將枯燥的東西使用框架集成,以提高使用便捷性。在嘗試了基於 Emit 中間語言後,最終決定使用生成代碼片段然後動態編譯的模式實現。背景:其一在前文中,我們通過框架實現了微服務面向... ...
  • 程式集版本 一個程式集會有三個版本,每個版本都是做什麼的呢,我們來看一下,每個版本號的用途及正確用法: 版本號 示例版本號: Major(主版本號)|Minor(次版本號)|Build(內部版本號)|Revision(修訂號) | | | 2 | 3 | 719 | 5 前兩個編號構成了公眾對版本的 ...
  • //使用時需要將配置里的內容換成自己的; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...