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");//将表格添加至TextBodyPartTextBodyPart 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();//添加sectionsec.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和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);//删除原有书签位置的内容bookmarkNavigator.ReplaceBookmarkContent(part, true, true);//用新添加段落的内容替换掉原书签的内容并保留格式 document.Sections.Remove(sec); //移除section//保存文档并打开document.SaveToFile("替换书签.docx");System.Diagnostics.Process.Start("替换书签.docx");}} }
View Code
以上是本次关于C# 操作Word书签功能的补充介绍,如需转载,请注明出处。
(本文完)
C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签相关推荐
- Python 操作Word文档插入图片和表格实例演示
Python 操作Word文档插入图片和表格实例演示 效果图 实现过程 ① python-docx 库安装 ② word 文档插入图片演示 ③ word 文档插入表格演示 [ 文章推荐 ] Pytho ...
- python打开word并插入图片_Python操作word文档插入图片和表格的实例演示
前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多说了,来一起看看详细的代码 实例代码: # -*- coding: U ...
- php怎么在表格里插图片,Python操作word文档插入图片和表格的实例演示
今天带来Python操作word文档插入图片和表格的实例演示教程详解 前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多 ...
- java使用poi操作word模板,插入图片、段落、表格
java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...
- python操作word文档中的图片_Python操作word文档插入图片和表格的实例演示
前言P6Q免费资源网 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多说了,来一起看看详细的代码P6Q免费资源网 实例代码: ...
- python 给word添加背景图片_Python如何使用word文档插入图片和表格
Python如何使用word文档插入图片和表格 发布时间:2020-10-26 13:49:29 来源:亿速云 阅读:101 作者:挣扎的蓝藻 这篇文章运用简单易懂的例子给大家介绍Python如何使用 ...
- Word控件Spire.Doc 【书签】教程(5): 使如何在word文档的书签处插入图片
Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...
- jacob.jar 操作word文件 添加水印、图片(附查阅Microsoft Office VBA参考文档方式)
jacob.jar 操作word文件 添加水印.图片 1.准备jacob.jar包和dll文件 将jacob.jar引入到工程, 64位: 将jacob-1.17-M2-x64.dll 放在C:\Wi ...
- 利用Word邮件合并插入图片
利用Word邮件合并插入图片 Word的邮件合并功能非常不错,其基本思想就是定义一个Word模板,再选择一个数据表格,然后将数据表格中的每条数据填入模板中形成一个页面,并将根据所有数据生成的页面组合起 ...
- word文档中找不到服务器,【在WORD文件中插入excel表格,编辑保存后重新打开word文件并双击excel时提示“找不到服务器应用程序、源文件】excel整个表格不见了...
为什么PPT插入EXCEL表格时显示无法找到服务器应用程序 这是由于excel或者ppt只能兼容.低版本的ppt和excel是无法打版本excel插入的表格的. 解决如下: 1.新建一个文本,将后缀名 ...
最新文章
- Java七步创建以JDBC连接数据库的程序
- mongodb,redis,mysql简要对比
- phpinfo信息泄漏
- plsql与64位的Oracle关联方法
- 【Centos 8】【Centos 7】【Docker】 添加 DockerHub 的镜像地址
- SAP 电商云 Spartacus UI 产品明细页面路由确定后,加载的是 page template
- buffer 和cache的区别
- 【文末福利】图论算法:稳定婚姻问题,如何找到最适合自己的另一半
- TypeError: Unexpected keyword argument passed to optimizer: amsgrad原因及解决办法
- html单页倒计时,单页面vue实例带倒计时功能
- 初中数学抽象教学的案例_《数学核心素养“数学抽象”的实践案例研究》
- Acrobat DC安装教程
- iv值计算(含qcut细节)
- 闪耀超颖光栅的建模与设计
- <第4个月>运营日记,shopee平台真的赚钱吗? Shopee卖家到底靠什么赚钱?
- 技术人的未来(三)——红海与蓝海
- Java蓝桥杯 算法提高 九宫格
- 全国天气预报查询接口
- 1-1/2+1/3-1/4+.........+1/99-1/100
- DTO DAO VO BO PO POJO区别
热门文章
- java jpa 字段 关联_jpaQuery中查询字段是关联表的查询方法以及@JoinEntity(joinEntityAlias =str)的作用和代码编写的规范...
- opencv:在二维定标中的应用
- 【赠书】深入浅出Python量化交易实战
- 【AutoML】如何选择最合适的数据增强操作
- 2022年全球及中国酰氯行业投资竞争力与发展状况分析报告
- php smarty 源码,Smarty php源码 v3.1.39
- 博鳌论坛国际粮食安全-林裕豪:从玉农业对话丰收节贸易会
- 主导精准脱贫-农业大健康·万祥军:恩施谋定硒功能性产业链
- GPU Gems 3
- 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库