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); } } }
【示例 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"); } } }
【示例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(); } } }
【示例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"); } } }
以上是本次关于C# 操作Word书签功能的补充介绍,如需转载,请注明出处。
(本文完)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript tips —— 关于下载与导出的二三事
前言 在项目中经常会遇到下载或导出服务端资源的需求,一般分为2种做法 获取文件流,编码后下载 获取文件的url,直接下载 本文主要探讨第二种方法,在最后会提及文件流的方法。 浏览器的安全策略 在介绍方法之前,我们需要知道浏览器的一些安全机制,防止恶意代码对用户的破坏。 现代浏览器(ie8除外)检测到非用户直接操作产生的新窗口,一般会阻止,比如在ajax的回调中打开新的窗口,因为这些操作并不是在用户点击的线程中,所以会拦截。 预开新标签页 做法 在异步操作之前,先打开一个新标签页 请求后端资源的地址 获取url后去修改空白页的url const downloadTab = window.open('about:blank'); ajax.get('xxx').then(url => { // 使用后端资源的url进行下载 downloadTab.location.href = href; }).catch(err => { // 处理异常 downloadTab.close(); }) 缺点 不管请求成功还是失败都会有新页面的闪烁出现 打开的新页面在什么时候关闭是个问题,因为...
- 下一篇
一入前端深似海,从此红尘是路人系列第十二弹之移动端模拟IOS虚拟按钮效果
用过苹果的大家都知道,苹果公司做了一个虚拟按钮,让页面上的挂件可被拖拽并吸附到屏幕边框处,降低挂件对用户的干扰。该效果如果用JavaScript进行实现又该如何实现呢,接下来我将分享给大家。首先上一张效果图 一、思路来源 首先体验过该虚拟按钮的都知道,它是根据距离屏幕边距进行一个位移判断的。当手从屏幕中放开的时候,对边距判断后进行动态效果操纵,这里动态我们将用到transform进行控制,代码也是纯原生JavaScript。这里我们也只是做一个移动效果的模拟,对于其中的一些功能并没有添加进来。 二、代码编写 1、html <div class="i-pendant" id="pendant"> <div class="drag"></div> </div> 2、css .i-pendant { width: 60px; height: 60px; border-radius: 5px; background: #999; position: fixed; top: 300px; right: 0; z-index: 90; -webki...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境