概要 書簽的設置可以幫助我們快速的定位某段文字,使用起來很方便,也很節省時間。在前一篇文章“C# 如何添加/刪除Word書簽”中介紹了插入、刪除書簽的方法,本篇文章將對C# 操作Word書簽的功能做進一步介紹。示例內容將包含以下要點: 在現有書簽位置插入圖片 在現有書簽位置插入表格 讀取書簽位置的文 ...
概要
書簽的設置可以幫助我們快速的定位某段文字,使用起來很方便,也很節省時間。在前一篇文章“C# 如何添加/刪除Word書簽”中介紹了插入、刪除書簽的方法,本篇文章將對C# 操作Word書簽的功能做進一步介紹。示例內容將包含以下要點:
- 在現有書簽位置插入圖片
- 在現有書簽位置插入表格
- 讀取書簽位置的文檔內容
- 替換現有書簽位置內容
使用工具
- Spire.Doc for .NET 6.1
- Visual Studio
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書簽功能的補充介紹,如需轉載,請註明出處。
(本文完)