技术标签: c# aspose.words .net Aspose.Words入门教程 aspose.words教程 开发语言
Aspose.Words For .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外,API支持所有流行的Word处理文件格式,并允许将Word文档导出或转换为固定布局文件格式和最常用的图像/多媒体格式。
立即下载Aspose.Words最新版http://www.evget.com/product/564
一个示例展示如何创建自己的合并字段类,代表一个在微软的Word文档中允许您获取或设置它合并字段的名称。
Example
如何在一个文档里重命名字段。
C#
using System; using System.Text; using System.Text.RegularExpressions; using Aspose.Words; using Aspose.Words.Fields; namespace Examples { /// <summary> /// Shows how to rename merge fields in a Word document. /// </summary> public class ExRenameMergeFields : ExBase { /// <summary> /// Finds all merge fields in a Word document and changes their names. /// </summary> public void RenameMergeFields() { // Specify your document name here. Document doc = new Document(MyDir + "RenameMergeFields.doc"); // Select all field start nodes so we can find the merge fields. NodeCollection fieldStarts = doc.GetChildNodes(NodeType.FieldStart, true); foreach (FieldStart fieldStart in fieldStarts) { if (fieldStart.FieldType.Equals(FieldType.FieldMergeField)) { MergeField mergeField = new MergeField(fieldStart); mergeField.Name = mergeField.Name + "_Renamed"; } } doc.Save(MyDir + "RenameMergeFields Out.doc"); } } /// <summary> /// Represents a facade object for a merge field in a Microsoft Word document. /// </summary> internal class MergeField { internal MergeField(FieldStart fieldStart) { if (fieldStart.Equals(null)) throw new ArgumentNullException("fieldStart"); if (!fieldStart.FieldType.Equals(FieldType.FieldMergeField)) throw new ArgumentException("Field start type must be FieldMergeField."); mFieldStart = fieldStart; // Find the field separator node. mFieldSeparator = fieldStart.GetField().Separator; if (mFieldSeparator == null) throw new InvalidOperationException("Cannot find field separator."); mFieldEnd = fieldStart.GetField().End; } /// <summary> /// Gets or sets the name of the merge field. /// </summary> internal string Name { get { return ((FieldStart)mFieldStart).GetField().Result.Replace("«", "").Replace("»", ""); } set { // Merge field name is stored in the field result which is a Run // node between field separator and field end. Run fieldResult = (Run)mFieldSeparator.NextSibling; fieldResult.Text = string.Format("«{0}»", value); // But sometimes the field result can consist of more than one run, delete these runs. RemoveSameParent(fieldResult.NextSibling, mFieldEnd); UpdateFieldCode(value); } } private void UpdateFieldCode(string fieldName) { // Field code is stored in a Run node between field start and field separator. Run fieldCode = (Run)mFieldStart.NextSibling; Match match = gRegex.Match(((FieldStart)mFieldStart).GetField().GetFieldCode()); string newFieldCode = string.Format(" {0}{1} ", match.Groups["start"].Value, fieldName); fieldCode.Text = newFieldCode; // But sometimes the field code can consist of more than one run, delete these runs. RemoveSameParent(fieldCode.NextSibling, mFieldSeparator); } /// <summary> /// Removes nodes from start up to but not including the end node. /// Start and end are assumed to have the same parent. /// </summary> private static void RemoveSameParent(Node startNode, Node endNode) { if ((endNode != null) && (startNode.ParentNode != endNode.ParentNode)) throw new ArgumentException("Start and end nodes are expected to have the same parent."); Node curChild = startNode; while ((curChild != null) && (curChild != endNode)) { Node nextChild = curChild.NextSibling; curChild.Remove(); curChild = nextChild; } } private readonly Node mFieldStart; private readonly Node mFieldSeparator; private readonly Node mFieldEnd; private static readonly Regex gRegex = new Regex(@"\s*(?<start>MERGEFIELD\s|)(\s|)(?<name>\S+)\s+"); } }
Visual Basic
Imports Microsoft.VisualBasic Imports System Imports System.Text Imports System.Text.RegularExpressions Imports Aspose.Words Imports Aspose.Words.Fields Namespace Examples ''' <summary> ''' Shows how to rename merge fields in a Word document. ''' </summary> <TestFixture> _ Public Class ExRenameMergeFields Inherits ExBase ''' <summary> ''' Finds all merge fields in a Word document and changes their names. ''' </summary> <Test> _ Public Sub RenameMergeFields() ' Specify your document name here. Dim doc As New Document(MyDir & "RenameMergeFields.doc") ' Select all field start nodes so we can find the merge fields. Dim fieldStarts As NodeCollection = doc.GetChildNodes(NodeType.FieldStart, True) For Each fieldStart As FieldStart In fieldStarts If fieldStart.FieldType.Equals(FieldType.FieldMergeField) Then Dim mergeField As New MergeField(fieldStart) mergeField.Name = mergeField.Name & "_Renamed" End If Next fieldStart doc.Save(MyDir & "RenameMergeFields Out.doc") End Sub End Class ''' <summary> ''' Represents a facade object for a merge field in a Microsoft Word document. ''' </summary> Friend Class MergeField Friend Sub New(fieldStart As FieldStart) If fieldStart.Equals(Nothing) Then Throw New ArgumentNullException("fieldStart") End If If Not fieldStart.FieldType.Equals(FieldType.FieldMergeField) Then Throw New ArgumentException("Field start type must be FieldMergeField.") End If mFieldStart = fieldStart ' Find the field separator node. mFieldSeparator = fieldStart.GetField().Separator If mFieldSeparator Is Nothing Then Throw New InvalidOperationException("Cannot find field separator.") End If mFieldEnd = fieldStart.GetField().End End Sub ''' <summary> ''' Gets or sets the name of the merge field. ''' </summary> Friend Property Name() As String Get Return DirectCast(mFieldStart, FieldStart).GetField().Result.Replace("«", "").Replace("»", "") End Get Set ' Merge field name is stored in the field result which is a Run ' node between field separator and field end. Dim fieldResult As Run = DirectCast(mFieldSeparator.NextSibling, Run) fieldResult.Text = String.Format("«{0}»", value) ' But sometimes the field result can consist of more than one run, delete these runs. RemoveSameParent(fieldResult.NextSibling, mFieldEnd) UpdateFieldCode(value) End Set End Property Private Sub UpdateFieldCode(fieldName As String) ' Field code is stored in a Run node between field start and field separator. Dim fieldCode As Run = DirectCast(mFieldStart.NextSibling, Run) Dim match As Match = gRegex.Match(DirectCast(mFieldStart, FieldStart).GetField().GetFieldCode()) Dim newFieldCode As String = String.Format(" {0}{1} ", match.Groups("start").Value, fieldName) fieldCode.Text = newFieldCode ' But sometimes the field code can consist of more than one run, delete these runs. RemoveSameParent(fieldCode.NextSibling, mFieldSeparator) End Sub ''' <summary> ''' Removes nodes from start up to but not including the end node. ''' Start and end are assumed to have the same parent. ''' </summary> Private Shared Sub RemoveSameParent(startNode As Node, endNode As Node) If (endNode IsNot Nothing) AndAlso (startNode.ParentNode <> endNode.ParentNode) Then Throw New ArgumentException("Start and end nodes are expected to have the same parent.") End If Dim curChild As Node = startNode While (curChild IsNot Nothing) AndAlso (curChild <> endNode) Dim nextChild As Node = curChild.NextSibling curChild.Remove() curChild = nextChild End While End Sub Private ReadOnly mFieldStart As Node Private ReadOnly mFieldSeparator As Node Private ReadOnly mFieldEnd As Node Private Shared ReadOnly gRegex As New Regex("\s*(?<start>MERGEFIELD\s|)(\s|)(?<name>\S+)\s+") End Class End Namespace
Aspose全系产品已更新至最新版本,欢迎前往下载试用! 如需技术交流也可以私聊我哦~
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数