C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
生活随笔
收集整理的這篇文章主要介紹了
C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
概要
書簽的設(shè)置可以幫助我們快速的定位某段文字,使用起來很方便,也很節(jié)省時間。在前一篇文章“C# 如何添加/刪除Word書簽”中介紹了插入、刪除書簽的方法,本篇文章將對C# 操作Word書簽的功能做進一步介紹。示例內(nèi)容將包含以下要點:
- 在現(xiàn)有書簽位置插入圖片
- 在現(xiàn)有書簽位置插入表格
- 讀取書簽位置的文檔內(nèi)容
- 替換現(xiàn)有書簽位置內(nèi)容
?
使用工具
- Spire.Doc for .NET 6.1
- Visual Studio
ps:下載安裝該類庫后,注意添加引用Spire.Doc.dl到項目程序,dll文件可在安裝路徑的Bin文件夾中獲取。
示例代碼(供參考)
測試文檔如下:
?
?
【示例1】 在現(xiàn)有書簽位置插入圖片
步驟 1: 添加using指令
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing;步驟 2 :主要代碼段
//創(chuàng)建實例,加載文檔 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){//創(chuàng)建實例,加載文檔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】在現(xiàn)有書簽位置插入表格
步驟 1:添加using指令
using Spire.Doc; using Spire.Doc.Documents; using System.Data;步驟 2 :創(chuàng)建文檔,加載文件
Document doc = new Document(); doc.LoadFromFile("test.docx");步驟 3 :創(chuàng)建表格
//創(chuàng)建Table對象 Table table = new Table(doc, true);//創(chuàng)建模擬數(shù)據(jù) 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" });//將數(shù)據(jù)填充至表格 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); //替換原有書簽內(nèi)容 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){//創(chuàng)建文檔,加載文件Document doc = new Document();doc.LoadFromFile("test.docx");//創(chuàng)建Table對象Table table = new Table(doc, true);//創(chuàng)建模擬數(shù)據(jù)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" });//將數(shù)據(jù)填充至表格 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");//將表格添加至TextBodyPartTextBodyPart part = navigator.GetBookmarkContent();part.BodyItems.Add(table);//替換書簽內(nèi)容 navigator.ReplaceBookmarkContent(part);//保存并打開文件doc.SaveToFile("output.docx", FileFormat.Docx2013);System.Diagnostics.Process.Start("output.docx");}} } View Code?
【示例3】讀取書簽位置的內(nèi)容
步驟 1 :添加using指令
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System;步驟 2 :獲取書簽位置的內(nèi)容
//初始化BookmarkNavigator類對象 BookmarksNavigator navigator = new BookmarksNavigator(doc); //定位到指定書簽位置,獲取書簽位置的文檔內(nèi)容 navigator.MoveToBookmark("bookmark1"); TextBodyPart textBodyPart = navigator.GetBookmarkContent();步驟 3 :讀取書簽內(nèi)容
//遍歷書簽內(nèi)容中的子項目,并將文本信息提取至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();?
?讀取結(jié)果:
全部代碼:
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);//定位到指定書簽位置,獲取書簽位置的文檔內(nèi)容navigator.MoveToBookmark("bookmark1");TextBodyPart textBodyPart = navigator.GetBookmarkContent();//遍歷書簽內(nèi)容中的子項目,并將文本信息提取至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】替換現(xiàn)有書簽內(nèi)容
步驟 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,并添加字符串內(nèi)容步驟 4 :獲取段落
//獲取段落內(nèi)容 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 :替換書簽內(nèi)容
BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);//實例化BookmarksNavigator類 bookmarkNavigator.MoveToBookmark("bookmark1", true, true);//定位到書簽“bookmark1”所在段落的位置 bookmarkNavigator.DeleteBookmarkContent(true);//刪除原有書簽位置的內(nèi)容 bookmarkNavigator.ReplaceBookmarkContent(part, true, true);//用新添加段落的內(nèi)容替換掉原書簽的內(nèi)容并保留格式 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){//創(chuàng)建Document類實例,加載文檔 Document document = new Document();document.LoadFromFile("test.docx");Section sec = document.AddSection();//添加sectionsec.AddParagraph().AppendText("Welcome Back, \n My Friend!"); //添加段落到section,并添加字符串內(nèi)容//獲取段落內(nèi)容 ParagraphBase firstReplacementParagraph = sec.Paragraphs[0].Items.FirstItem as ParagraphBase;ParagraphBase lastReplacementParagraph = sec.Paragraphs[sec.Paragraphs.Count - 1].Items.LastItem as ParagraphBase;//實例化類TextBodySelection和TextBodyPartTextBodySelection 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);//刪除原有書簽位置的內(nèi)容bookmarkNavigator.ReplaceBookmarkContent(part, true, true);//用新添加段落的內(nèi)容替換掉原書簽的內(nèi)容并保留格式 document.Sections.Remove(sec); //移除section//保存文檔并打開document.SaveToFile("替換書簽.docx");System.Diagnostics.Process.Start("替換書簽.docx");}} } View Code?
以上是本次關(guān)于C# 操作Word書簽功能的補充介紹,如需轉(zhuǎn)載,請注明出處。
(本文完)
?
總結(jié)
以上是生活随笔為你收集整理的C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动硬盘格式化了的资料找回方法
- 下一篇: 公钥证书编码解读