简介: 本文介绍了如何利用 LotusScript. 来灵活操作 Lotus Notes 富文本域(Rich Text Field)里的内容,并提供了几个示例程序来进行展示。要求读者有 LotusScript. 编程经验并能熟练使用 Lotus Domino Designer。

引言

一直以来,Lotus Notes 的富文本域都是使用非常频繁的,几乎在任何 Domino 应用程序中,都会用到富文本域。Lotus Notes 富文本域的功能也非常强大,除了支持普通的文本以外,还支持图片、表格、嵌入对象、Http 链接、Notes 链接、附件等等众多的类型。但是有个问题一直长期困扰着 LotusScript. 开发人员,那就是对 Notes 富文本域里面的各种类型的内容的灵活操作很困难,其实 Domino 在不断升级的过程中,已经增加了许多新的 LotusScript. 类来操作 Notes 富文本域了,但是很多 LotusScript. 开发人员对此并不熟悉。本文将介绍如何使用这些类来灵活操作富文本域。

操作 Notes 富文本域相关的 LotusScript. 类

和操作 Notes 富文本域相关的 LotusScript. 类包括:

  • NotesRichTextNavigator 富文本域的导航器,用来访问富文本域中的各种元素;
  • NotesRichTextRange 表示富文本域内容的一个范围,可以包括多个元素;
  • NotesRichTextDocLink 表示富文本域内容的文档链接;
  • NotesEmbeddedObject 表示嵌入式对象或者文件附件;
  • NotesRichTextSection 表示富文本域中的一个区段;
  • NotesRichTextTable 表示富文本域中的表格;
  • NotesRichTextStyle. 表示富文本的各种属性;
  • NotesRichTextParagraphStyle. 表示富文本段落的各种属性;
  • NotesColorObject 表示一种颜色。

使用示例

下面我们通过一个程序来分析各个类的使用方法。

首先我们建立一个空白的 Domino 应用程序,然后建立一个名为“test”的表单,这个表单中只有一个名为“Body”的富文本域,然后在缺省视图里面建立一个 Action 名为“test”,代码如下。这段程序将生成一个文档,文档中包含一个富文本域,并在富文本域中生成各种元素。

清单 1. 生成各种元素

Sub Click(Source As Button)Dim s As New NotesSessionDim db As NotesDatabaseDim doc As NotesDocumentSet db  =  s.CurrentDatabaseSet doc = New NotesDocument(db)doc.Form. = "test"Dim rtf As NotesRichTextItem Set rtf = doc.CreateRichTextItem ("Body")'生成一个文本段落并设置其字体大小,颜色等属性Dim style. As NotesRichTextStyle. Set style. = s.CreateRichTextStyle. Dim pstyle. As NotesRichTextParagraphStyle. Set pstyle. = s.CreateRichTextParagraphStyle. Dim color As NotesColorObjectSet color  = s.CreateColorObjectstyle.FontSize = 20style.Bold = Truepstyle.Alignment = ALIGN_LEFTpstyle.FirstLineLeftMargin = RULER_ONE_INCHCall color.SetRGB(123, 234, 123) style.NotesColor = color.NotesColorCall rtf.AppendStyle(style)Call rtf.AppendParagraphStyle(pstyle)Call rtf.AppendText("这是一个文本段落,靠左对齐。")Call rtf.AddNewline(1)'生成一个链接,链接到当前数据库Call rtf.AppendDocLink(db, "链接到当前数据库", "当前数据库")'生成一个包含一个表格的区段Call rtf.AppendStyle(style)Call rtf.BeginSection("这是一个区段", style, color, True)Call rtf.AppendText("这是区段的开始")iRow% = 3iCol% = 3style.NotesColor = COLOR_BLUECall rtf.AppendStyle(style)'添加一个3X3的表格Call rtf.AppendTable(iRow%, iCol%)    Call rtf.AppendText("这是区段的结束")Call rtf.EndSectionDim nav As NotesRichTextNavigatorSet nav = rtf.CreateNavigatorCall nav.FindFirstElement(RTELEM_TYPE_TABLECELL) style.FontSize=16style.Bold=FalseCall rtf.AppendStyle(style)For i% = 1 To iRow%For j% = 1 To iCol%Call rtf.BeginInsert(nav)Call rtf.AppendText("行 " & i% & ", 列 " & j%)Call rtf.EndInsertCall nav.FindNextElement(RTELEM_TYPE_TABLECELL)NextNext'添加一个附件Call rtf.EmbedObject(EMBED_ATTACHMENT, "", "C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water lilies.jpg")Call doc.Save(True,True)
End Sub

下面的图片是运行这个程序后生成的文档截图:

图 1. 程序生成文档图
图 1. 程序生成文档图

下面将分析一下这个程序中使用的一些方法。

  • NotesSession.CreateRichTextStyle:创建一个 NotesRichTextStyle. 对象。
  • NotesSession.CreateRichTextParagraphStyle:创建一个 NotesRichTextParagraphStyle. 对象。
  • NotesSession.CreateColorObject:创建一个 NotesColorObject 对象。

    需要注意的是 NotesRichTextStyle,NotesRichTextParagraphStyle. 和 NotesColorObject 这三种对象是不能用 New 来创建的,因为这三个类没有 New() 方法,只能通过 NotesSession 来创建。

  • NotesRichTextItem.AppendStyle:在当前位置插入一个格式对象,该位置以后的格式都使用这种格式,直到插入了另外一个格式。
  • NotesRichTextItem.AppendParagraphStyle:在当前位置插入一个段落格式对象,该位置以后的段落格式都使用这种格式,直到插入了另外一个段落格式。
  • NotesRichTextItem.BeginSection:在富文本域中插入一个区段。
  • NotesRichTextItem.EndSection:区段结束,必须和 BeginSection 配对使用。

    在两个方法之间可以通过各种 append 方法添加各种元素。插入区段的时候,区段总是在富文本域的最后。还需要注意的是不能创建一个包含富文本域中已有的元素的区段,通过 BeginSection 方法创建的区段总是空的,区段的内容需要通过程序自己添加。

  • NotesRichTextItem.CreateNavigator:创建一个富文本域导航器对象 NotesRichTextNavigator。

    创建一个富文本域导航器只能使用这种方法,NotesRichTextNavigator 也没有 new 方法。也可以 NotesRichTextRange.Navigator 属性来得到一个 NotesRichTextNavigator 对象。

  • NotesRichTextNavigator 类是用来灵活访问操作富文本域里的内容的最重要的一个类,通过它的一些方法,可以方便的访问到各种富文本域中的元素。

    导航器对象 NotesRichTextNavigator 会维护一个当前位置,任何在富文本域中的 get 或者 find 的操作都可能会改变这个当前位置。导航总发生在同一种类型的元素中,主要通过 find 和 get 两类方法来访问相应的元素,找到需要的元素后,再通过 get 方法来取得这个元素。下表列出了这些方法。

表 1. 方法列表

方法名 描述
FindFirstElement 将当前位置移动到指定类型的第一个元素
FindNextElement 将当前位置移动到指定类型的下一个元素
FindLastElement 将当前位置移动到指定类型的最后一个元素
FindNthElement 将当前位置移动到指定类型的第 n 个元素
FindFirstString 将当前位置移动到第一个指定字符串的开头
FindNextString 将当前位置移动到下一个指定字符串的开头
GetElement 返回当前位置的元素
GetFirstElement 返回第一个指定类型的元素
GetLastElement 返回最后一个指定类型的元素
GetNextElement 返回下一个指定类型的元素
GetNthElement 返回第 n 个指定类型的元素

NotesRichTextItem.BeginInsert:将插入位置从富文本域结尾处改为指定元素的开始或者结尾处。

NotesRichTextItem.EndInsert:将插入位置重置到富文本域的结尾处,需要和 BeginInsert 配对使用。

在两个方法之间可以通过各种 append 方法添加各种元素。我们来看看 BeginInsert 的具体使用方法:

Call notesRichTextItem.BeginInsert( element, [ after ] )

参数说明

element:可以是 NotesEmbeddedObject, NotesRichTextDocLink, NotesRichTextNavigator, NotesRichTextRange, NotesRichTextSection, 或者 NotesRichTextTable,表示该对象的位置 . 如果是 NotesRichTextNavigator 则表示此 NotesRichTextNavigator 对象所表示的当前位置。

After:布尔型可选参数,True 表示插入位置在元素的末尾,False(缺省值)表示插入位置在元素的开头。

通过上面的简单的例子,我们可以看到如何利用 LotusScript. 来操作富文本域,下面我们通过另外一个例子来展示如何利用 LotusScript. 来实现一个简单的类似 Word 中将一段文本和表格互相转换的功能,主要展示的是如何利用 NotesRichTextRange 类来操作富文本域中的文本段落。

首先建一个表单 test,表单中创建一个 Body 的富文本域,然后创建一个表单操作名为 Text2Table,完成将文本转化为表格的功能。代码如下:

清单 2 将文本转化为表格

Sub Click(Source As Button)Dim s As New NotesSessionDim ws As New NotesUIWorkspaceDim uidoc As NotesUIDocumentSet uidoc = ws.CurrentDocumentDim doc As NotesDocumentSet doc = uidoc.DocumentDim rtf As NotesRichTextItemSet rtf = doc.GetFirstItem("Body")'设定分隔符为空格delimiter$ =  " "rowcount% = 0colcount% =  0Dim rtnav As NotesRichTextNavigatorSet rtnav = rtf.CreateNavigatorDim rtrange As NotesRichTextRangeDim rows() Dim paraArray As VariantDim paraStr As StringDim firstTime As BooleanfirstTime = TrueIf rtnav.FindFirstElement(RTELEM_TYPE_TABLECELL) ThenMsgbox "表格已经存在!"Exit SubEnd IfIf rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH) ThenSet rtrange = rtf.CreateRangeDo'设置文本范围的开始为rtnav所指向的位置Call rtrange.SetBegin(rtnav)'取得该位置的文本段落paraStr = rtrange.TextParagraphparaArray = Split(paraStr)'通过firstTime来判断文本段落的格式是否能转化为表格If firstTime Thencolcount% = Ubound(paraArray)firstTime = FalseElseIf colcount% <> Ubound(paraArray) ThenMsgbox "文本无法转化为表格!"Exit SubEnd IfEnd If'定义动态数组来保存所有的文本段落Redim Preserve rows(rowcount%)rows(rowcount%) = paraArrayrowcount% = rowcount% + 1Loop While rtnav.FindNextElement(RTELEM_TYPE_TEXTPARAGRAPH)ElseMessagebox "富文本域中没有文本"Exit SubEnd If'将富文本域值清空rtf.Values = ""rowcount% = rowcount% - 1'插入表格,并将保存的文本依次插入相应的表格单元Dim row As VariantCall rtf.AppendTable(rowcount%+1, colcount%+1)Call rtnav.FindFirstElement(RTELEM_TYPE_TABLECELL)For i% = 0 To rowcount%row = rows(i%)For j% = 0 To colcount%Call rtf.BeginInsert(rtnav)Call rtf.AppendText(row(j%))Call rtf.EndInsertCall rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)NextNext'保存文档并重新打开以刷新Call doc.Save(True, True)Call uidoc.Close(True)Call ws.EditDocument(False,doc)End Sub

再建立一个表单操作名为 Table2Text,完成将表格转化为文本的功能。代码如下:

清单 3 将表格转化为文本

Sub Click(Source As Button)Dim s As New NotesSessionDim ws As New NotesUIWorkspaceDim uidoc As NotesUIDocumentSet uidoc = ws.CurrentDocumentDim doc As NotesDocumentSet doc = uidoc.DocumentDim rtf As NotesRichTextItemSet rtf = doc.GetFirstItem("Body")delimiter$ =  " "Dim rtnav As NotesRichTextNavigatorSet rtnav = rtf.CreateNavigatorDim rtrange As NotesRichTextRangeSet rtrange = rtf.CreateRangeDim tbl As NotesRichTextTableDim rowcount As IntegerDim colcount As IntegerIf rtnav.FindFirstElement(RTELEM_TYPE_TABLE) ThenSet tbl = rtnav.GetElementrowcount = tbl.RowCount - 1colcount = tbl.ColumnCount - 1Redim (rowcount, colcount)For i% = 0 To rowcountFor j% = 0 To colcountCall rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)Call rtrange.SetBegin(rtnav)If j% = colcount ThenCall rtf.AppendText(rtrange.TextParagraph )ElseCall rtf.AppendText(rtrange.TextParagraph & delimiter$)End IfNextIf i% < rowcount Then'生成新的段落Call rtf.AddNewline(1)End IfNextElseMessagebox "富文本域中没有表格"Exit SubEnd IfCall tbl.RemoveCall doc.Save(True, True)Call uidoc.Close(True)Call ws.EditDocument(False,doc)
End Sub

运行结果如下图:

图 2. 文本格式
图 2. 文本格式

图 3. 表格格式
图 3. 表格格式

总结

通过以上本文的介绍和示例及代码分析,相信读者对如何操作 Notes 富文本域已经有了了解,我们可以看到 LotusScript. 的强大功能,通过灵活运用适当的类,可以完成很多我们认为不能完成的功能,希望本文对读者有所启发和帮助。

利用 LotusScript 灵活操作 Lotus Notes 富文本域相关推荐

  1. 在Word指定位置插入富文本域值(html文本)

    遇到此问题,首先想到的就是各种百度.结果度娘了一会并没有发现有用的有效的解决方法,哎,看来还得靠自己啊. 首先整理了下手头上的资源,一是HtmlAgilityPack,专门解析Html文本用的:二是我 ...

  2. 灵活可扩展,2023年值得尝试的13款富文本编辑器

    作为前端开发人员,我们经常需要为网站和应用程序添加文本内容.与传统的文本编辑器不同,富文本编辑器可让您轻松创建各种类型的文本内容,包括加粗字体.斜体字.框架.列表.图片和视频等. 本文我将向大家推荐 ...

  3. 使用vue的富文本编辑器操作

    使用vue的富文本编辑器操作 vue的富文本编辑器使用以及多图片文件上传与回显 一. vue-quill-edit 1. 安装vue的富文本 cd 当前的vue项目路径 npm install qui ...

  4. php lotus notes,Lotus Notes 和 Domino Web Access 的比较

    Domino 邮件服务器为终端用户提供了很多灵活性,它们可以使用 Domino Web Access 或 Lotus Notes 客户机来连接自己的邮件.Domino Web Access 提供了一个 ...

  5. 富文本及编辑器的跨平台方案

    一.前言 之前在<富文本编辑器之游戏角色升级 ing>一文中,跟大家分享了富文本编辑器的发展历程.选型技巧和扩展方案.今天将和大家一起聊一聊"富文本及编辑器跨平台方案" ...

  6. 【推荐】1657- 灵活可扩展,2023年值得尝试的13款富文本编辑器

    作为前端开发人员,我们经常需要为网站和应用程序添加文本内容.与传统的文本编辑器不同,富文本编辑器可让您轻松创建各种类型的文本内容,包括加粗字体.斜体字.框架.列表.图片和视频等. 本文我将向大家推荐 ...

  7. Lotus Notes Send EMail from VB or VBA

    Original doc link:http://www.fabalou.com/VBandVBA/lotusnotesmail.asp 你知道吗?VBA或者VB可以直接编程从发送邮件到Notes系统 ...

  8. asp .net mvc实现 富文本框

    首先 我使用的是summernote 具体库参考  Summernote 中文网 | Summernote 是一个简单灵活的所见即所得的 HTML 在线编辑器,基于 jQuery 和 Bootstra ...

  9. vue 图片宫格_vue 如何拿到后台传回的富文本中的img,进行9宫格排列展示以及相关处理...

    描述: res.data.list 返回的数组, 数组中的每个对象有一个 content,就是传回来的富文本的内容,要拿到这里面的所有的img,进行9宫格排列处理: 1.let img = this. ...

最新文章

  1. 我用24小时、8块GPU、400美元在云上完成训练BERT!特拉维夫大学新研究
  2. linux下实用小脚本,十个增加 Linux Shell 脚本趣味的小工具
  3. Python基础03 序列
  4. javascript:闭包的总结
  5. mysql 字符串不限长度,mysql中的字符串长度是否有限制?
  6. 衡量 mysql性能状态 参数 详解
  7. filter in Fiori HANA live report
  8. 数据库-MySQL-搭建服务器
  9. android Fragments (Android官方文档中文版)
  10. .git文件夹_如何使用git把本地代码上传(更新)到github上
  11. 《精通 ASP.NET MVC 4》----1.5 ASP.NET MVC 4的新特性
  12. MyEclipse中SVN分支合并到主干
  13. 单网口RFC2544测试——信而泰网络测试仪实操
  14. Python 整型、浮点型、字符串型、布尔型转换,基础运算符
  15. 图片填满外层div 自适应不拉伸变形
  16. 用户画像标签体系及实现方法
  17. 视频教程-jQuery交互式前端开发(第一季):初体验/选择器/事件绑定-jQuery
  18. c语言传奇引擎源码,Ei3.0服务端引擎源代码+登陆网关+客户端插件
  19. 背压/反压/BackPressure
  20. 【其他】对数转换的作用

热门文章

  1. Effective C# 原则34:创建大容量的Web API(译)
  2. Oracle的rownum原理和使用
  3. centos php7.0 mysql_CentOS 7.3 下 安装LNMP(Nginx1.10+MySQL5.7+PHP7.0.20)
  4. linux系统 opt扩容,Linux系统扩容根目录磁盘空间的操作方法
  5. mysql size_mysql fetch size 相关问题
  6. MySQL高级 - 案例 - 需求及环境准备
  7. Nginx负载均衡的原理及流程分析
  8. 为什么要用MyBatis-Spring JDBC
  9. IDEA 集成Lombok 插件-安装插件
  10. aop简介-aop开发明确的事