Word书签不但可以帮助读者快速跳转到想要查看的位置,而且可以用做“占位符”,程序员获取“占位符”之后,就可以更新这些“占位符”,即替换书签内容。替换模板文档中的书签内容,可以帮助我们快速生成Word报表或文档。

本文总结了一个将常见的Word文档元素(文字、图片和表格)替换进书签的C#解决方案,具体步骤见下文。

使用工具:

  • Spire.Doc.dll 6.4.5
  • Visual Studio 2013
步骤一 制作模板

1.  新建Word文档

图1 创建文档

2.  插入书签

图2 插入书签

3.  保存模板,命名为“bookmark_template.docx”

图3 保存模板文档
步骤二 在项目中添加引用

1.  右键点击“解决方案资源管理”中的“引用”,选择“添加引用”

图4 添加引用

2.  选择要引用的Spire.Doc.dll文件,添加至项目中

图5 引用Spire.Doc.dll

步骤三 编码

Spire.Doc提供了BookmarksNavigator类来获取和操作文档中的书签,但方法不是很直观。为了方便,我自己封装了Bookmark类,其中包括RepalceContent及其2个重载方法来分别应对插入文字、图片和表格三种情况。

  • public TextRange ReplaceContent(string bookmarkName, string text, bool saveFormatting)
  • public void ReplaceContent(string bookmarkName, string picPath, float widthScale, float heightScale, TextWrappingStyle wrapStyle, ShapeHorizontalAlignment horizontalAlignment)
  • public void ReplaceContent(string bookmarkName, Table table)

第一部分:Bookmark.cs编码

using Spire.Doc;
using Spire.Doc.Fields;
using System.Drawing;
using Spire.Doc.Interface;
using Spire.Doc.Documents;namespace ReplaceBookmarkContent
{class Bookmark{private Document doc = null;public Bookmark(Document document){doc = document;}/// <summary>/// 用文本替换指定书签的内容/// </summary>/// <param name="bookmarkName">书签名</param>/// <param name="text">文本</param>/// <param name="saveFormatting">删除原始书签内容时,是否保留格式</param>/// <returns>TextRange</returns>public TextRange ReplaceContent(string bookmarkName, string text, bool saveFormatting){BookmarksNavigator navigator = new BookmarksNavigator(doc);navigator.MoveToBookmark(bookmarkName);//指向特定书签navigator.DeleteBookmarkContent(saveFormatting);//删除原有书签内容     Spire.Doc.Interface.ITextRange textRange = navigator.InsertText(text);//写入文本return textRange as TextRange;}/// <summary>/// 用图片替换指定书签的内容/// </summary>/// <param name="bookmarkName">书签名</param>/// <param name="picPath">图片路径</param>/// <param name="widthScale">宽度缩放比例,0以上正整数</param>/// <param name="heightScale">高度缩放比例,0以上正整数</param>/// <param name="wrapStyle">环绕方式</param>/// <param name="horizontalAlignment"></param>public void ReplaceContent(string bookmarkName, string picPath, float widthScale, float heightScale, TextWrappingStyle wrapStyle, ShapeHorizontalAlignment horizontalAlignment){BookmarksNavigator navigator = new BookmarksNavigator(doc);navigator.MoveToBookmark(bookmarkName);navigator.DeleteBookmarkContent(false);IParagraphBase paragraphBase = navigator.InsertParagraphItem(ParagraphItemType.Picture);//插入类型为图片Image image = Image.FromFile(picPath);//加载图片DocPicture picture = paragraphBase.OwnerParagraph.AppendPicture(image);//插入图片picture.WidthScale = widthScale;picture.HeightScale = heightScale;picture.TextWrappingStyle = wrapStyle;picture.HorizontalAlignment = horizontalAlignment;}/// <summary>/// 用表格替换指定书签的内容/// </summary>/// <param name="bookmarkName">书签名</param>/// <param name="table">Table实例</param>public void ReplaceContent(string bookmarkName, Table table){BookmarksNavigator navigator = new BookmarksNavigator(doc);navigator.MoveToBookmark(bookmarkName);TextBodyPart body = new TextBodyPart(doc);body.BodyItems.Add(table);navigator.ReplaceBookmarkContent(body);}/// <summary>/// 创建表格并写入数据,返回Table对象/// </summary>/// <param name="rowsNum">行数</param>/// <param name="columnsNum">列数</param>/// <param name="columnWidth">列宽</param>/// <param name="horizontalAlignment">水平对齐方式</param>/// <param name="datatable">DataTable实例</param>/// <returns></returns>public Table CreateTable(int rowsNum, int columnsNum, float columnWidth, RowAlignment horizontalAlignment, System.Data.DataTable datatable){Table table = new Table(doc, true, 1f);//初始化Table对象table.ResetCells(rowsNum, columnsNum);//设置行数和列数//填充数据for (int i = 0; i < datatable.Rows.Count; i++){for (int j = 0; j < datatable.Columns.Count; j++){table.Rows[i].Cells[j].AddParagraph().AppendText(datatable.Rows[i][j].ToString());}}//设置列宽for (int i = 0; i < rowsNum; i++){for (int j = 0; j < columnsNum; j++){table.Rows[i].Cells[j].Width = columnWidth;}               }table.TableFormat.HorizontalAlignment = horizontalAlignment;//表格水平对齐方式return table;}}
}

第二步部分:生成文件的编码

//加载模板文档
Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\bookmark_template.docx");//初始化Bookmark对象
Bookmark bookmark = new Bookmark(doc);//用文本替换书签bookmark_text的内容
string text = "XXX科技股份有限公司成立于2010年12月,是一家致力于高新技术产品研发、生产、销售的高科技股份制企业,"+ "公司坚持以技术创新为核心,以知识产权为基础,以人才战略为支撑,经过多年的砺练与发展,公司已逐步成以创新为引导的,"+ "产品具有竞争力,人才素质优良的新兴科技企业。";
bookmark.ReplaceContent("bookmark_text", text, true);//用图片替换书签bookmark_picture的内容
string picPath = @"C:\Users\Administrator\Desktop\company_logo.jpg";
bookmark.ReplaceContent("bookmark_picture", picPath, 80f, 80f, TextWrappingStyle.TopAndBottom, ShapeHorizontalAlignment.Center);//创建模拟数据
DataTable dt = new DataTable();
dt.Columns.Add("employee_id", typeof(string));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("age", typeof(string));
dt.Columns.Add("sex", typeof(string));
dt.Columns.Add("title", typeof(string));
dt.Rows.Add(new string[] {"工号", "姓名", "年龄", "性别", "职位" });
dt.Rows.Add(new string[] {"1023","Nancy", "28", "女", "Java程序员" });
dt.Rows.Add(new string[] { "1024","James", "34", "男", ".NET程序员" });
dt.Rows.Add(new string[] { "1025","Kobe", "38", "男", "系统管理员" });//创建表格,并填充数据
Table table = bookmark.CreateTable(dt.Rows.Count, dt.Columns.Count, 100f, RowAlignment.Left, dt);//用表格替换书签bookmark_table的内容
bookmark.ReplaceContent("bookmark_table", table);//生成Word文件
doc.SaveToFile("output.docx", FileFormat.Docx2013);

运行代码,得到下面的结果:

图6 生成的文件

注:

1. Spire.Doc本身也有Bookmark类,但仅用于添加书签到文档中,请注意本文中的Bookmark类是自定义的方便自己使用的方法的集合。

2.  Spire.Doc 6.4.5 为商业版,在不应用许可证的情况下,生成的文档会有水印信息。笔者写文章时已应用临时许可证(官方提供的用于测试软件的License)。

3.  笔者使用免费版的Spire.Doc测试过,以上效果基本都能实现,但图片的环绕方式只能设置为“InLine”,且水平位置为靠右,设置其他环绕方式时,图片位置会出错。这应该是免费版的Bug。

(原创内容,转载请注明出处)

C# 替换Word文档中的书签内容【详细步骤】相关推荐

  1. python替换word内容,文档翻译-使用python替换word文档中的段落内容

    前段时间遇到一个需求,需要将word文档中的内容进行替换,并且需要保证格式不变.在找了一圈资料后,发现没有现成的api供使用:由于本人做过一段时间文档解析,因此打算从word文档的xml入手,通过py ...

  2. Java版Word开发工具Aspose.Words功能解析:查找和替换Word文档中的文本

    MS Word提供了一种简单的方法来查找和替换文档中的文本.查找和替换文本的一种流行用例之一可能是在文档之间的敏感信息在各个实体之间共享之前,对其进行删除或替换.但是,手动过程可能需要您安装MS Wo ...

  3. Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本

    很多时候,您需要替换 Word 文档中的特定文本或短语.MS Word 具有针对此类情况的内置功能,您可以一键替换所需的文本.在本文中,您将学习如何使用 Python 以编程方式查找和替换 Word ...

  4. java利用POI替换word文档中的标签

    java利用POI替换word文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...

  5. C# 替换Word文档中的图片

    C# 替换Word文档中的图片 图片是Word文档中非常常见的一种元素,我们在处理Word文档时经常会对图片进行如添加,提取,替换和删除等操作.之前我已经介绍过如何提取Word文档中的图片,这篇文章将 ...

  6. Word控件Spire.Doc 【Table】教程(7): 如何在C#中用表格替换word文档中的文本

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

  7. 替换word文档中的换行符

    替换word文档中的换行符 首先,我们想批量删除Word中的特殊格式,必须要知道它们的表示方法.熟悉了这些表示我们就可以利用word中的"替换"来替换这些内容.下面介绍一些常用的格 ...

  8. Word控件Spire.Doc 【超链接】教程(8):在 C#/VB.NET 中链接到 Word 文档中的书签

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

  9. php 提取文字,如何使用PHP从word文档中提取文本内容?

    我想用PHP从word文档中提取文本内容. 我在Microsoft Word for Mac 2011中创建了一个新的单词文档. 编辑:也通过在Windows 7中的Microsoft Word中创建 ...

  10. C# 读取Word文档中的文本内容

    C# 读取Word文档中的文本内容 这篇文章将介绍如何使用C#和Free Spire.Doc组件读取Word文档中的文本内容.Free Spire.Doc提供了两种方法来读取Word文档中的内容,一种 ...

最新文章

  1. [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...
  2. 计算机导论成绩分为几部分,计算机导论复习题(选择部分)汇总.docx
  3. ASP.NET中如何实现负载均衡
  4. weinre调试移动端页面
  5. Kettle转换作业50个案例代码
  6. 从零开始用好 Maven : 从 Hello World 到日常使用
  7. 实例64:python
  8. tensorflow 目标分割_Tensorflow中的控制流和优化器
  9. 字符串中的第一个唯一字符
  10. 接口和抽象类的区别?
  11. 完美的做图配色专辑,UI设计师赶紧收藏
  12. 虚拟服务器的密码忘记了,忘记虚拟密码
  13. 适用于苹果Mac的 5 个最佳 SSH 客户端软件
  14. 2018年终总结以及未来展望
  15. libjpeg-turbo 2.1.2 交叉编译
  16. 非常精美的唐诗,无与伦比哦1
  17. 【论文笔记】Dynamic Convolution: Attention over Convolution Kernels
  18. 让AI简单且强大:深度学习引擎OneFlow技术实践
  19. 银行与银行之间的现金是如何流转的:央行支付清算系统
  20. 人月神话是神话嘛?嗯!

热门文章

  1. java 解析dataset_C# DataSet用法的详细解析|C#教程
  2. 程序员100套简历模板,全网最全
  3. 软件测试简历项目经验怎么写,没有项目经验?
  4. 初级Java代码——自制坦克大战游戏
  5. 黑群晖linux删除文件夹命令,手把手教你黑群晖(二)
  6. roboto字体android,Android字体设置及Roboto字体使用方法
  7. Kafka配置JAAS
  8. linux java8 安装包(版本8u131-b11)
  9. 【学习笔记】《分布式光纤振动传感系统技术的研究与实现--华科--邹**--光学工程》重点笔记
  10. appscan 9.0.3.10 版本下载