我们再来看一个模版型的报表的实例。
选择报表类型,输入参数:
产生的报表:
预先设计好的Excel模版以附件形式保存在配置文档中:
继承了Report基类的子类Report2的代码如下:
Public Class Report2 As Report
Private intYear As Integer
Private intMonth As Integer
Private VIEW_REPORT As String
Private offices As NArray
Private acctTypes As NArray
Sub New(intYear As Integer, intMonth As Integer), Report()
'设置报表的类型为模版型
me.reportType=REPORT_TYPE_TEMPLATE
'设定模版的名称
me.Template="Report2"
'接受用户选择的参数
me.intYear=intYear
me.intMonth=intMonth
'指定要从其中取数据的视图
me.VIEW_REPORT="vwRecord4Report2"
'Offices excluding SC & DG
'初始化报表所需的办公室和科目等数据
Set offices = New NArray(-1)
Call offices.Import("03,04,02,05,01,08", ",")
Set acctTypes = New NArray(-1)
With acctTypes
Call .Add("Fringe")
Call .Add("Misc")
Call .Add("Outside Services")
Call .Add("Rent")
Call .Add("Repair/Maintenance")
Call .Add("Tax")
Call .Add("Travel")
Call .Add("Utilities")
Call .Add("Wages")
End With
End Sub
%REM
Function ExportData
Description: Comments for Function
%END REM
Private Function ExportData()
'设置writer的模式为列模式
writer.Mode=writer.Mode_column
Call writer.MoveTo(5, 1)
'将月份数字转换成英文的月份名称
Dim converter As New Monthconverter()
writer.WriteCell("Y-T-D as of " & converter.Getname(me.intMonth) & " " & me.intYear)
'Dim view As NotesView
'Set view=db.Getview("vwRecord4Report2")
'05 ,06,03,04,02,05,01,08
'将writer移动到指定的区域
Call writer.MoveTo(40, 2)
'设置writer换列时的上界
writer.TopBound=40
'调用方法WriteTable()写报表的一部分
Call me.WriteTable(me.intYear, "Actual")
Call writer.MoveTo(56, 2)
writer.TopBound=56
Call me.WriteTable(me.intYear-1, "Actual")
Call writer.MoveTo(87, 2)
writer.TopBound=87
Call me.WriteTable(me.intYear, "Budget")
End Function
%REM
Function WriteTable
Description: Write a table region in the report
%END REM
Private Function WriteTable(intYear As Integer, amtType As String )
Dim keys(4) As String
keys(0)=CStr(intYear)
keys(1)=amtType
Dim total As Double
'Write values of SC & DG
'Dim total2 As Variant
ForAll t In acctTypes.container
keys(3)=t
keys(2)="05 "
total=me.GetYTDAmount(keys)
keys(2)="06"
total=total+me.GetYTDAmount(keys)
writer.WriteCell(total)
End ForAll
'Write values of other offices
ForAll o In offices.container
Call writer.NextColumn()
ForAll t In acctTypes.container
keys(2)=o
keys(3)=t
total=me.GetYTDAmount(keys)
writer.WriteCell(total)
End ForAll
End ForAll
End Function
%REM
Function GetYTDAmount
Description: Get the YTD amount in accordance with the conditions
in the provided keys
%END REM
Private Function GetYTDAmount(keys As Variant) As Double
Dim total As Double, amt As Variant
Dim i As Integer
For i=1 To me.intMonth
keys(4)=CStr(i)
amt=GetTotal(me.VIEW_REPORT, keys, 0, "")
If Not IsEmpty(amt) Then
total=total+amt
End If
Next
GetYTDAmount=total
End Function
End Class
这个报表里有很多个表格区域,有些需要写入数据,有些则通过预设的公式计算出结果。在上面的代码中,ExportData()方法使用专门的写Excel工作表的类SheetWriter(将在下一篇文章中详细介绍)的实例writer,移动到各个表格区域,再调用WriteTable()方法写入数据。而WriteTable()方法利用在23.
在LotusScript中利用视图的合计功能求和一文中介绍过的GetTotal()函数读取视图的汇总列以获得报表所需的统计数据。代码里还应用了20. 面向对象的LotusScript(三)之NArray里介绍的Narray和21. 面向对象的LotusScript(四)之MonthConverter介绍的MonthConverter。
分享到:
相关推荐
lotus Domino BS开发 lotusscript print动态导出excel
lotusscript(代理)导出Excel
B/S模式通过LotusScript直接导出EXCEL文件,文件中只有最重要的输出部分,其余需自行补充完成,其中Head和Sheet样式可以通过Excel录入宏获取
使用lotusScript从服务器端导出excel,有各种各样的Excel操作.
使用lotusScript在服务器端导出excel[归类].pdf
有前端的js导出到Excel,可是这个导出需要加信任站点,有些用户就是娇,不想动手,就弄了个后台代理导出到Excel
用lotusScript导入excel和lotusScript导出excel
lotus Domino BS开发 lotusscript导出excel方法一
lotus Domino BS开发 lotusscript导出excel样式说明
B/S模式通过LotusScript直接导出txt文件,文件中只有最重要的输出部分,其余需自行补充完成。
lotusScript(代理)导入Excel
domino中Excle文件上传后,代理解析Excle文档,可用于Excel文件上传,代理解析获取数据,前端可展示table等。
可以把lotus 的设计代码导出成 文档,类似于 java api的方式展现
分四个部分,都只是与lotusscript相关的。 1,用LotusScript访问修改数据库,包含lotusscript基础 2,用户界面操作 3,创建和修改文档 4,使用On Error敘述追踪 runtime错误
LotusScript基本语法知识,个人收集和总结,希望对大家有帮助.
lotus Domino BS开发 lotusscript 視圖導出excel
LotusScript程序开发经验总结.doc
LotusScript中数据库文档操作[定义].pdf
LotusScript是一个完全面向对象的程序设计语言,具有丰富的类,方法和属性,包含有集成的对象浏览器和程序开发环境。 NOTES公式语言包含一整套的语法规则,提供丰富的命令和函数,可以对常量和变量进行计算,...
LotusScript语法入门中文版 PDF格式。