IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Lotus  >

使用 LotusScript 自动生成和操作 Lotus Symphony 文档

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

欧 迎丰, 软件测试工程师, IBM
闫 霁, 软件测试工程师, IBM
张 永蕙, 软件工程师, IBM

2009 年 8 月 17 日

IBM Lotus Symphony 是一款全新的办公文档处理软件,同时也具有了很好的可编程性。本文将以一个自动生成软件测试报告文档的应用为例,介绍了如何利用 Lotus Domino Designer 中的 LotusScript 脚本语言对 Symphony 文档进行基本的创建、打开、保存或导出等操作,以及如何进一步地定义 Symphony 文档的文本段落、文档表格、工作表、单元格等文档要素,并演示如何对其进行相应的插入、删除、修改、设置等操作。

LotusScript 与 Symphony 简介

Lotus 软件试用下载

立即下载最新版本的 IBM Lotus 试用软件,轻松体验产品的最新特性!

Lotus Symphony 是一款全新的办公文档处理软件,支持 Open Document Format 文档标准并兼容众多的 Microsoft Office 和 SmartSuite 文档格式。它提供了三个核心工具:Lotus Symphony Documents、Lotus Symphony Spreadsheets 和 Lotus Symphony Presentations,分别用于创建和共享文档、电子表格和幻灯片。

Lotus Notes/Domino 是集成的通信、协作及 Web 应用服务器软件平台, Domino Designer 作为对应的开发 Notes 数据库和应用的专门工具,提供了 LotusScript 这样一种脚本语言来实现和定制一些高级的应用功能。LotusScript 在语法规则上类似 BASIC 脚本语言,可以用于面向对象程序的开发,它还可以调用 Domino 提供的丰富的函数库以访问 Notes 数据库内部或外部的资源,实现各种文档的操作和处理功能。





回页首


Lotus Symphony 对象模型

Lotus Symphony 是基于 OpenOffice.org 技术和 Lotus Expeditor 平台构建的,Symphony 以此获得了强大的文档处理能力和基于 Eclipse 的开放平台,这也使得 Symphony 能够集成到同样是基于 Lotus Expeditor 的 Lotus Notes 中,为 Notes 客户端提供办公文档应用处理功能。

Symphony 封装了一套对象模型 API(Lotus Symphony Object Model API),使用这些 API 可以控制 Symphony 打开各种文档,完成对表格,章节段落等的操作。用户可以通过 LotusScript 或者 Java 来调用这些 API,但是需要注意的是,LotusScript 对 Symphony Object Model API 的调用需要在安装了 Symphony 模块的 Lotus Notes 环境下使用。


图 1. Lotus Symphony 系统结构图
图 1. Lotus Symphony 系统结构图

对应于文档,电子表格,幻灯片这三种电子文档,Symphony 对应的封装了 Symphony 文本文档对象模型 API,Symphony 电子表格对象模型 API 和 Symphony 幻灯片对象模型 API。

Symphony 文本文档对象模型 API

Symphony 文本文档对象模型 API 封装了用于处理文档内容的 API,包括对文本文档章节段落,表格,页眉页脚等字段,以及 Symphony 的 Mail Merge 功能的操作。


图 2. Symphony 文档对象模型 API 结构
图 2. Symphony 文档对象模型 API 结构

Symphony 电子表格对象模型 API

Symphony 电子表格对象模型 API 封装了用于处理电子表格内容的 API,包括对电子表格的工作表,单元格,图表对象,Symphony DataPilot 表格的操作。


图 3. Symphony 电子表格对象模型 API 结构
图 3. Symphony 电子表格对象模型 API 结构

Symphony 幻灯片对象模型 API

Symphony 幻灯片对象模型 API 相对比较简单,目前提供了对幻灯片文档的打开关闭,保存或导出成其他格式的文档如 PDF 文档等操作。


图 4. Symphony 幻灯片对象模型 API
图 4. Symphony 幻灯片对象模型 API




回页首


使用 LotusScript 创建或打开,保存 Symphony 文档

在软件测试过程中,会定期的生成一些原始的测试数据,如每周的 Performance Verification Test 数据,为了保证 Performance 测试数据的准确可靠,需要对同一个 case 进行 8 次以上的测试,然后对原始数据进行数据处理,如去掉最大值和最小值,取平均值并计算均方差等。当 Test Case 数量较大时,人工的进行这些数据的处理并生成测试报告需要耗费大量的时间,而且容易发生差错,我们可以编写一个简单的 LotusScript 程序,来自动的完成这些工作,生成正式的测试报告。

我们首先来看一下如何使用 LotusScript 创建一个 Symphony 文档作为我们的测试报告。

在程序的最开始,使用 LotusScript 调用 Symphony 对象模型 API 时,首先需要在 Script 中包含封装了对应 API 声明的 lss 文件:

 %INCLUDE “use_symphony.lss”

新建或打开文档

Symphony 对象模型 API 中,定义了用于新建三种文档的 API:

 AddDocument(Template, AsTemplate, Visible) 
 AddSpreadsheet(Template, AsTemplate, Visible) 
 AddPresentation(Template, AsTemplate, Visible) 

其中,参数 Template 可以被赋值为完整的路径文件名,用于指定使用某个模板来新建文档,而参数 AsTemplate 可以被赋值为 true 或 false,true 表示使用 Template 参数指定的模板创建一个新的文档,而 false 表示打开模板文件进行修改,Visible 被赋值为 true 或 false 则表示是否以可见的方式创建文档。

打开文档的 API 更为简单:

 OpenDocument(FileName, Visible) 
 OpenSpreadsheet(FileName, Visible) 
 OpenPresentation(FileName, Visible) 

当我们需要根据测试的结果自动生成一份测试数据报告时,可以用下面的代码新建或打开测试报告文档。

 Dim application As SymphonyApplication 
 Dim documents As SymphonyDocuments 
 Dim spreadsheets As SymphonySpreadsheets 
 Dim doc As symphonyDocument 
 Dim spreadsheet As SymphonySpreadsheet 
 Set application = New SymphonyApplication 
 Set documents = application.Documents 
 Set spreadsheets = application.Spreadsheets 
 Set doc = documents.AddDocument("E:\testreportTemplate.ott", True,True) 
 Set spreadsheet = spreadsheets.OpenSpreadsheet("E:\preben_result.ods",True) 

保存或导出文档

保存或导出 Symphony 文档的 API 定义:

 SaveDocument() 
 SaveAsDocument(FileName, FileFormat) 
 SaveSpreadsheet() 
 SaveAsSpreadsheet(FileName, FileFormat) 
 SavePresentation() 
 SaveAsPresentation (FileName, FileFormat) 
 ExportPDF(FileName) 

我们可以通过 ExportPDF() 将文件导出成 PDF 格式,也可以通过 SaveAsDocument 将文件另存为其它格式,目前支持的格式有:


表 1. Save As 支持文档格式表
File Category File format File type
Word Processor OpenDoc Text 1.0 .odt file
OpenDoc Text Template 1.0 .ott file
MS Word 97 .doc file
Rich Text Format .rtf file
Text .txt file
Spreadsheet OpenDoc SpreadSheet 1.0 .ods file
OpenDoc SpreadSheet Template 1.0 .ots file
MS Excel 97 .xls file
Text - txt - csv (StarCalc) .csv file
Presentation OpenDoc Presentation 1.0 .odp file
OpenDoc Presentation Template 1.0 .otp file
MS PowerPoint 97 .ppt file

我们可以通过如下的代码将一个 ods 的文档另存为 MS Office 的 xls 格式的文档:

 Dim application As SymphonyApplication 
 Dim spreadsheets As SymphonySpreadsheets 
 Dim spreadsheet As SymphonySpreadsheet 
 Set application = New SymphonyApplication 
 Set spreadsheets = application.Spreadsheets 
 Set spreadsheet = spreadsheets.OpenSpreadsheet("E:\preben_result.ods",True) 
 Call spreadsheet.SaveAsSpreadsheet("C:\preben_result.xls","MS Excel 97") 

关闭文档

文档在操作完成后需要关闭:

 CloseDocument(SaveChanges) 
 CloseSpreadsheets(SaveChanges) 
 ClosePresentation(SaveChanges) 

参数 SaveChanges 可以设置为 true 或 false,表示关闭文档时是否需要保存之前所做的修改。





回页首


使用 LotusScript 编辑 Symphony 文档要素

在使用 LotusScript 创建完我们的测试报告文档后,我们需要在这个报告添加具体的内容,如被测试软件的版本号,测试环境,测试数据的处理结果并设置相应的格式等等。Symphony 对象模型将文档中的章节段落,表格,页眉页脚,工作表,单元格等等定义为文档要素,并提供了相关的 API 对其进行操作。

文本文档中章节段落的操作

Symphony 对象模型 API 定义了对章节段落的获取,插入,删除以及格式设置的操作。

首先,我们可以通过 SymphonyTextParagraph 的 Item 方法得到文档某个段落对象:

 Dim application As SymphonyApplication 
 Dim documents As SymphonyDocuments 
 Dim doc As symphonyDocument 
 Dim para As SymphonyTextParagraph 
 Set application = New SymphonyApplication 
 Set documents = application.Documents 
 Set doc = documents.OpenDocument("E:\PVTweeklyTestReport.odt", True) 
 Set para = doc.Paragraphs.Item(1); 

对于取得的段落对象,Symphony 对象模型 API 定义了一个 getRange 方法来获得段落对象对应的 SymphonyTextRange 对象。而 SymphonyTextRange 对象则可以用来访问段落的内容,字体,起始和结束的位置,并可以通过 SymphonyTextRange 对象在段落的首末位置插入文本,分隔符等。

取得段落的 TextRange:

 …… 
 Set doc = documents.OpenDocument("E:\PVTweeklyTestReport.odt", True) 
 Set para = doc.Paragraphs.Item(1); 
 Dim range As SymphonyTextRange 
 Set range = para.getRange 

TextRange 定义的 API:

 InsertBefore(Text) 
 InsertAfter(Text) 
 InsertBreak(Position,Type) 
 InsertParagraph(Position, BeforOrAfter) 

如在段落中输入一段文字:

……
 Set range = para.getRange 
 Call range.InsertBefore(“Test Report for Weekly Performance Verification Test”) 	

段落的插入,删除和格式设置:

可以调用 SymphonyTextRang 对象的 InsertParagraph(tableOrSection, BeforeOrAfter) 方法来插入新的段落。而段落的删除可以使用 SymphonyTextParagraph 的 remove() 方法来进行删除。SymphonyTextParagraph 的 BackColor, BackTransparent, AutoFirstLineIndent 等属性提供了对段落进行格式设置的接口。

相关代码如下:

……
 Set table = textTables.Item(2) 
 Set range = paraTestResult.Range 
 Call range.InsertParagraph(table, true) 
 Call paraOSversion.Remove() 
 Set paraBuildInfo = doc.Paragraphs.Item(2) 
 paraBuildInfo. AutoFirstLineIndent = True 
 paraBuildInfo. BackTransparent = False 
…… . 

文本文档中表格的操作

Symphony 对象模型 API 定义了对文本文档中表格的获取、插入删除,对行或列的插入删除,以及对表格中单元格的内容和格式的设置等各种操作。我们首先可用通过文档的 Tables 方法得到当前文档的所有表格的序列 SymphonyTextTables,然后通过 SymphonyTextTables 的 Item(index) 得到指定的表格对象 SymphonyTextTable:

 ……
 Dim textTables As SymphonyTextTables 
 Dim table As SymphonyTextTable 
 Set textTables = doc.Tables 
 Set table = textTables.Item(1) 

我们可以删除或者新增文档中的表格:

 Add(Position, NumOfRow, NumOfColumn) 
 Remove() 

如:

 ……
 Dim newTextTable As SymphonyTextTable 
 Set textTables = doc.Tables 
 Set pos = doc.Paragraphs.Item(3).Range.Start 
 Set newTextTable = textTables.Add(pos, 5&, 5&) 
 Set oldTable = textTables(3) 
 Call oldTable.Remove 

Symphony 文档对象模型分别对 TextTableRows 和 TextTableColumns 定义了:

 Add(Index , Count) 
 Item(Index) 
 Remove(BeginIndex , Count) 

方法,可以对表格的行列进行操作:

 ……
 Dim tableRows As SymphonyTextTableRows 
 Dim tableRow As SymphonyTextTableRow 
 tableRows = textTable.Rows 
 Set tableRow = textTableRows.Add(2&, 1&) 
 Call textTableRows.Remove(1&, 1&) 

我们还能够通过 SymphonyTextTable 提供的 Cell(RowIndexOrName, ColumnIndex) 方法对文档表格中的单元格进行访问,还可以通过 SymphonyTextTableCell 的 Value 和 Formula 属性设置单元格的内容或者公式:

 ……
 Dim cell As SymphonyTextTableCell 
 Set cell = table.Cell(2 , 3) 
 cell.Value = 3# 
 cell.Formula = “=<B1>*<B2>”

电子表单的各种操作

前面介绍了使用 LotusScript 在 Symphony 对象模型 API 的基础上对 Symphony 文档进行操作的情况,而在软件测试的过程中,特别是对于一些性能测试来说,测试报告里会包含有大量的数据,这种情况下,使用电子表单的形式有助于更好的对测试结果进行整理分析,改进我们的产品质量。Symphony 对象模型 API 同样对电子表单的各种操作提供了很好的支持。

工作表的各种操作:

首先我们可以通过打开的电子表单 SymphonySheets 对象的 Item(index) 函数,得到电子表单的工作表 SymphonySheet 对象,并可以通过 Previous 和 Next 属性访问临近的工作表,还可以调用:

 AddTo(Sheet_pos, count, BeforeOrAfter) 
 CopyTo() 
 MoveTo() 
 Remove() 

方法进行工作表的增加,拷贝,移动和删除的操作。

 ……
 Dim spreadsheets As SymphonySpreadsheets 
 Dim spreadsheet As SymphonySpreadsheet 
 Dim sheets As SymphonySheets 
 Dim sheet_BldInfo As SymphonySheet 
 Dim sheet_Sum As SymphonySheet 
 Dim sheet_PreSum As SymphonySheet 
 Set spreadsheets = app.Spreadsheets 
 Set spreadsheet = spreadsheets.OpenSpreadsheet(“E:\PVT_testreport.ods”, True) 
 Set sheets = spreadsheet.Sheets 
 Set sheet_BldInfo = sheets.Item(1) 
 Set sheet_Sum = sheet_BldInfo.Next 
 Call sheets.AddTo(sheet_Sum,1,True) 
 Set sheet_PreSum = sheets.Item(2) 
 Sheet_PreSum.Name = “Pre_Sum”
 Call sheet_Sum.CopyTo(sheet_PreSum, False) 
 Call sheet_Sum.Remove 

对单元格的各种操作:

在编写测试报告时,需要将各种原始数据的值填写到对应的单元格中,或者需要通过计算公式求得某个单元格的值,我们可以通过 SymphonySheet 对象的

 Cells(RowIndex, ColumnIndex) 
 Columns(index) 
 Rows(index) 
 Range(NameOrRange, Range2) 

这些方法来得到行列或单元格 SymphonyRange 对象:

 ……
 Dim Mem_result0_cell As SymphonyRange 
 Dim Pre_Mem_result_Column, Cur_Mem_result_range As SymphonyRange 
 Set Mem_result0_cell = sheet.Cells(7,3) 
 Set Pre_Mem_result_Column = sheet.Columns(2) 
 Set Cur_Mem_result_range = sheet.Range(“C3:I3”) 

我们可以调用单元格 SymphonyRange 对象的

 Value/Text/Formula 
 BackColor/ColumnWidth/RowHeight/Font/WrapText 
 AutoFit()/AutoFormat(TableStyleName) 
 Cut()/Copy()/Paste()/Replace() 

这些属性或方法来设置单元格的数值、格式、公式并进行一些拷贝、移动、替换等操作:

 ……
 Set Mem_result0_cell = sheet.Cells(7,3) 
 Mem_result0_cell.Value = 137# 
 Set Mem_result_Sum_cell = sheet.Cells(10,3) 
 Mem_result_Sum_cell.Formula = “=SUM(C7:C9)”
 Set Mem_CaseName_cell = sheet.Cells(10,2) 
 Mem_CaseName_cell.Text = “Memory after file open”
 Call Mem_CaseName_cell.AutoFit 
 Call Mem_CaseName_cell.Copy() 
 Set Mem_NewCaseName_cell = sheet.Cell(15,2) 
 Call Mem_NewCaseName_cell.Paste() 





回页首


总结

通过上述的介绍,我们了解了如何使用 LotusScript 来创建和编辑 Symphony 文档,包括对文本文档、电子表格这些文档内容的编辑,使用 Symphony 对象模型 API 来访问文档中的内容,以及对文档的保存和关闭等,并最终生成我们需要的测试报告。这种利用 LotusScript 来操作 Symphony 文档的方法可以帮助我们自动处理一些需要繁琐计算和大量重复劳动的工作,从而提高我们的工作效率和准确性。



参考资料

学习

获得产品和技术

讨论


作者简介

欧迎丰,是 IBM 中国软件开发中心的一名软件测试工程师。目前从事应用软件的系统测试与性能测试工作。


闫霁, 是 IBM 中国软件开发中心的一名软件测试工程师。目前从事应用软件的功能测试工作。


张永蕙,是 IBM 中国软件开发中心的一名软件工程师,擅长 LotusScript 开发和测试,目前从事应用软件的功能测试以及 Lotus Notes 应用开发的工作。




对本文的评价








IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款