概要

书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间。在前一篇文章“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书签(二)——插入图片、表格到书签;读取、替换书签相关推荐

  1. Python 操作Word文档插入图片和表格实例演示

    Python 操作Word文档插入图片和表格实例演示 效果图 实现过程 ① python-docx 库安装 ② word 文档插入图片演示 ③ word 文档插入表格演示 [ 文章推荐 ] Pytho ...

  2. python打开word并插入图片_Python操作word文档插入图片和表格的实例演示

    前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多说了,来一起看看详细的代码 实例代码: # -*- coding: U ...

  3. php怎么在表格里插图片,Python操作word文档插入图片和表格的实例演示

    今天带来Python操作word文档插入图片和表格的实例演示教程详解 前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多 ...

  4. java使用poi操作word模板,插入图片、段落、表格

    java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...

  5. python操作word文档中的图片_Python操作word文档插入图片和表格的实例演示

    前言P6Q免费资源网 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多说了,来一起看看详细的代码P6Q免费资源网 实例代码: ...

  6. python 给word添加背景图片_Python如何使用word文档插入图片和表格

    Python如何使用word文档插入图片和表格 发布时间:2020-10-26 13:49:29 来源:亿速云 阅读:101 作者:挣扎的蓝藻 这篇文章运用简单易懂的例子给大家介绍Python如何使用 ...

  7. Word控件Spire.Doc 【书签】教程(5): 使如何在word文档的书签处插入图片

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...

  8. jacob.jar 操作word文件 添加水印、图片(附查阅Microsoft Office VBA参考文档方式)

    jacob.jar 操作word文件 添加水印.图片 1.准备jacob.jar包和dll文件 将jacob.jar引入到工程, 64位: 将jacob-1.17-M2-x64.dll 放在C:\Wi ...

  9. 利用Word邮件合并插入图片

    利用Word邮件合并插入图片 Word的邮件合并功能非常不错,其基本思想就是定义一个Word模板,再选择一个数据表格,然后将数据表格中的每条数据填入模板中形成一个页面,并将根据所有数据生成的页面组合起 ...

  10. word文档中找不到服务器,【在WORD文件中插入excel表格,编辑保存后重新打开word文件并双击excel时提示“找不到服务器应用程序、源文件】excel整个表格不见了...

    为什么PPT插入EXCEL表格时显示无法找到服务器应用程序 这是由于excel或者ppt只能兼容.低版本的ppt和excel是无法打版本excel插入的表格的. 解决如下: 1.新建一个文本,将后缀名 ...

最新文章

  1. Java七步创建以JDBC连接数据库的程序
  2. mongodb,redis,mysql简要对比
  3. phpinfo信息泄漏
  4. plsql与64位的Oracle关联方法
  5. 【Centos 8】【Centos 7】【Docker】 添加 DockerHub 的镜像地址
  6. SAP 电商云 Spartacus UI 产品明细页面路由确定后,加载的是 page template
  7. buffer 和cache的区别
  8. 【文末福利】图论算法:稳定婚姻问题,如何找到最适合自己的另一半
  9. TypeError: Unexpected keyword argument passed to optimizer: amsgrad原因及解决办法
  10. html单页倒计时,单页面vue实例带倒计时功能
  11. 初中数学抽象教学的案例_《数学核心素养“数学抽象”的实践案例研究》
  12. Acrobat DC安装教程
  13. iv值计算(含qcut细节)
  14. 闪耀超颖光栅的建模与设计
  15. <第4个月>运营日记,shopee平台真的赚钱吗? Shopee卖家到底靠什么赚钱?
  16. 技术人的未来(三)——红海与蓝海
  17. Java蓝桥杯 算法提高 九宫格
  18. 全国天气预报查询接口
  19. 1-1/2+1/3-1/4+.........+1/99-1/100
  20. DTO DAO VO BO PO POJO区别

热门文章

  1. java jpa 字段 关联_jpaQuery中查询字段是关联表的查询方法以及@JoinEntity(joinEntityAlias =str)的作用和代码编写的规范...
  2. opencv:在二维定标中的应用
  3. 【赠书】深入浅出Python量化交易实战
  4. 【AutoML】如何选择最合适的数据增强操作
  5. 2022年全球及中国酰氯行业投资竞争力与发展状况分析报告
  6. php smarty 源码,Smarty php源码 v3.1.39
  7. 博鳌论坛国际粮食安全-林裕豪:从玉农业对话丰收节贸易会
  8. 主导精准脱贫-农业大健康·万祥军:恩施谋定硒功能性产业链
  9. GPU Gems 3
  10. 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库