一种web动态行式报表中表达式的计算方法

文档序号:6609762阅读:147来源:国知局
专利名称:一种web动态行式报表中表达式的计算方法
技术领域
本发明属于计算机信息处理技术领域,涉及一种报表上表达式计算的方法,具体涉及一种在HTML页面上填写可增删行的动态行式报表过程中计算报表上表达式的轻量级方法。
背景技术
在报表填写过程中经常需要实现自动计算(如填入数量与单价与程序应自动计算出金额)和合法性检查(如填入的身份证号码与出生日期不相符时应报错并拒绝)等功能。显然,这些功能都将依赖于表达式计算的能力。
行式报表是最常见的填写表,它的主体填写区域由一些数据结构相同的逻辑行构成。行式报表上有两种基本表达式一是行内表达式(如用数量和单价计算出金额),这类表达式在形式上对每个逻辑行都相同,只是引用的单元格数据来自不同的逻辑行;二是针对一组行的统计表达式(如计算金额的合计),一般针对所有行或某个分组进行。这两种表达式可以混合运算。
在传统的C/S模式下,表达式计算问题实现较为容易,采用通行的算法(在大多数数据结构教程中都有介绍)编写表达式计算程序来分析处理表达式,在取单元格时根据当前环境从某逻辑行中取出数据参与运算即可(著名开发工具PowerBuilder中的Datawindow即是这样实现)。
但是,在HTML页面上完成同样的工作则要困难得多。在纯HTML页面上通行的编程技术只有解释执行的JavaScript语言(以下简称JS)。理论上采用JS编写表达式计算程序仍然可行,但实践中却会因JS效率过于低下而无法实用;同时由于JS语言本身能力较弱,写出这种复杂功能程序的代码量会相当大,导致页面过于庞大而不利于下载。因此,在实际应用中不可能在纯HTML页面上实施上面的思路。
所幸的是,JS中固化了一个eval函数可用于计算表达式。但eval计算的表达式中只能出现事先定义过的JS变量或函数,而不能由程序员自行编写重载代码动态地取出某逻辑行的单元格值。
在这种限制下,采用静态报表方案可以有限地解决HTML页面上的表达式计算问题。即在报表发布成HTML之前,由后台程序为所有逻辑行生成由发布后报表上静态单元格构成的表达式,其中统计表达式都分解成发布后报表上单个单元格的运算。这样,在HTML页面上执行eval函数时将不会再出现未定义的变量(单元格)从而可以完成计算。
但是,这种方案不允许报表在填写过程中再插入或删除行。新增逻辑行上的行内表达式无法自动被添加出来(用JS自行计算出变换后的表达式与用JS编写计算表达式程序的复杂度是一致的),且统计表达式中将缺少新增行中的单元格。这时计算将不能完整地进行。
对于动态报表填写(即填写过程中要再插入或删除行)上的表达式计算,目前只能采用针对性编程的方案,为每种报表编写一段JS代码,拼出该报表发生变化后需要增加或修改的表达式。但显然这种方案没有通用性。

发明内容
本发明的目的在于针对当前HTML页面上报表填写过程中表达式计算的缺陷,提供一种新的表达式计算方法。该方法能够处理在WEB页面上的行式报表填写过程中报表发生变化后的表达式计算,并具有很好的通用性。
本发明的技术方案如下,一种WEB动态行式报表中表达式的计算方法,包括如下步骤(1)设计一个用于填写的动态行式报表模板并计算生成出来;(2)根据计算结果生成待发布的HTML,并记录HTML表格上单元格在报表模板中对应的原始单元格名称;(3)将事先编写好的用于处理HTML表格上增删行的JS程序附加到待发布的HTML上;(4)将所有在HTML上要计算的表达式中的单元格用cell函数替代,基于单元格的统计函数用新的相关统计函数替代;(5)将事先用JS编写的cell函数和新的相关统计函数附加到待发布的HTML上;(6)发布最终形成的HTML。
进一步,在上述WEB报表表达式计算方法中,步骤(1)中用于设计动态行式报表模板和计算生成的方法可以是任意某种能处理动态行式填写报表的报表生成方法,如非线性报表生成方法。
进一步,在上述WEB报表表达式计算方法中,步骤(3)中处理HTML表格中增删行操作的JS程序应能够在增加行的单元格上附加记录上该单元格在报表模板中对应的原始单元格名称。这个程序有较多常规手段可实现,这里不再详细描述。
进一步,在上述WEB报表表达式计算方法中,步骤(4)中转换表达式时具体进行如下动作a.单元格替换成以其名称为参数的cell函数,如A1将变成cell(“A1”),B5+C3变成cell(“B5”)+cell(“C3”);b.基于单元格的统计函数替换成以其名称为参数的新相关函数,如sum(A1)变成sumcell(“A1”),avg(B3)变成avgcell(“B3”);进一步,在上述WEB报表的表达式计算方法中,步骤(5)中的cell函数执行过程为在HTML表格的指定逻辑行(一般是当前逻辑行)中寻找对应原始单元格名称为给定参数的单元格,将其格值返回。相关统计函数执行过程为在HTML表格的指定逻辑行范围(一般是当前组或全体行)内寻找所有对应原始单元格名称为给定参数的单元格,对这些单元格值做相关的统计运算后将结果返回。根据上述过程可以具体写出这些函数的实现。
进一步,在上述WEB报表的表达式计算方法中,步骤(6)中发布后的HTML上,表达式计算可直接用eval函数计算,涉及到单元格值时将由eval函数调用在步骤(5)中编写cell函数和相关统计函数动态获得,从而保证增删行后的动态计算的正确性。
本发明的有益效果在于使得在WEB行式报表填写过程中表达式计算具体如下的特征(1)通用性本方法中步骤(3)、(5)中涉及到的JS代码不针对任何特定的行式报表和表达式,可以处理绝大多数在WEB上的表达式计算,具有很好的通用性。
(2)可动态由于表达式中的单元格值采用了cell函数和相关统计函数动态获得,因而在填写过程中对报表增加或删行逻辑行后,表达式计算仍能正确完成。
(3)轻量级方法未采用JS处理复杂的表达式分析操作,从而保证整个方法在HTML页面上执行的高效率和低容量。


图1是本发明所述方法的流程图。
具体实施例方式
下面结合说明书附图给出本发明的实施案例,并考察在发布后HTML中表达式的计算过程。
例,WEB动态行式报表上表达式计算的方法(1)设计一个用于填写的动态行式报表模板并计算生成出来;如下表是一个采用非线性报表生成设计的行式报表模板。

其中A2是纵向扩展格,第2行是行式报表的逻辑行。在D2格和D3各有一个将在发布后HTML表格上计算的表达式,内容已写入格中。
设下表是将上表扩展计算后的结果,为简便说明,仅扩展了2行。

(2)根据计算结果生成待发布的HTML,并记录HTML表格上单元格在报表模板中对应的原始单元格名称;用小写字母表示扩展出来的报表和待发布的HTML表格上的单元格,以便与报表模板中的单元格区分。此时HTML表格上单元格与报表模板中的原始单元格对应关系为a1-A1,a2-A2,a3-A2,a4-A3,b1-B1,b2-B2,b3-B2,c1-C1,c2-C2,c3-C2,d1-D1,d2-D2,d3-D2,d4-D3。
(3)将事先编写好的用于处理HTML表格增删行的JS程序附加到待发布的HTML上;(4)将所有在HTML上要计算的表达式中的单元格用cell函数替代,基于单元格的统计函数用新的相关统计函数替代;D2的表达式B2*C2将变换成cell(“B2”)*cell(“C2”)D3的表达式SUM(D2)将变换成sumcell(“D2”)。
(5)将事先用JS编写的cell函数和新的相关统计函数附加到待发布的HTML上;(6)发布最终形成的HTML。
现在来考查在最终生成的HTML上采用eval函数计算表达式的过程。
设在报表上第3行前插入一个逻辑行并填入了一些数据,如下表

显然此时单元格与模板上原始单元格名称对应关系变为a1-A1,a2-A2,a3-A2,a4-A2,a5-A3,b1-B1,b2-B2,b3-B2,b4-B2,c1-C1,c2-C2,c3-C2,c4-C2,d1-D1,d2-D2,d3-D2,d4-D2,d5-D3。
这时需要重新计算对原始单元格为D2和D3的单元格的表达式,即d2,d3,d4,d5这几个单元格。
d2的表达式为cell(“B2”)*cell(“C2”),将当前逻辑行设置为d2所在的逻辑行后用eval计算该表达式,此时cell(“B2”)函数将返回b2的值,cell(“C2”)将返回c2的值,则d2实际的计算结果为b2*c2。
d3的表达式为cell(“B2”)*cell(“C2”),将当前逻辑行设置为d3所在的逻辑行后用eval计算该表达式,此时cell(“B2”)函数将返回b3的值,cell(“C2”)将返回c3的值,则d3实际的计算结果为b3*c3。
类似地分析可知d4实际的计算结构为b4*c4。
d5的表达式为sumcell(“D2”),将当前逻辑行范围设置为当前组(此时即是全体行)后用eval计算该表达式,此时sumcell将把所有对应原始单元格名称为D2的单元格的格值取出求和返回,即将d2,d3,d4的值取出求和,则d5的计算结果为sum(d2,d3,d4)。
对比分析可知,删除行时的情况类似,表达式仍能计算正确。
从上面例子可知,在动态插入或删除逻辑行时,采用本方法生成的HTML均可以正确计算出各表达式的值。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种WEB动态行式报表中表达式的计算方法,包括如下步骤(1)设计一个用于填写的动态行式报表模板并计算生成出来;(2)根据计算结果生成待发布的HTML,并记录HTML表格上单元格在报表模板中对应的原始单元格名称;(3)将事先编写好的用于处理HTML表格增删行的JS程序附加到待发布的HTML上;(4)将所有在HTML上要计算的表达式中的单元格用cell函数替代,基于单元格的统计函数用新的相关统计函数替代;(5)将事先用JS编写的cell函数和新的相关统计函数附加到待发布的HTML上;(6)发布最终形成的HTML。
2.根据权利要求1所述的WEB报表表达式计算方法,其特征在于步骤(3)中处理HTML表格中增删行操作的JS程序能够在增加行的单元格上附加记录上该单元格在报表模板中对应的原始单元格名称。
3.根据权利要求1所述的WEB报表表达式计算方法,其特征在于步骤(4)中将表达式中的单元格替换成其名称为参数的cell函数,将基于单元格的统计函数替换成以其名称为参数的相关统计函数。
4.根据权利要求1所述的WEB报表表达式计算方法,其特征在于步骤(5)中所述的JS函数具有如下执行过程cell函数在HTML表格的指定逻辑行中寻找对应原始单元格名称为给定参数的单元格,将其格值返回;相关统计函数在HTML表格的指定逻辑行范围内寻找所有对应原始单元格名称为给定参数的单元格,对这些单元格值做相关的统计运算后将结果返回。
5.根据权利要求1所述的WEB报表表达式计算方法,其特征在于步骤(6)中发布的HTML上,表达式计算可直接用eval函数计算。
全文摘要
本发明属于计算机信息处理技术领域,涉及一种报表上表达式计算的方法,具体涉及一种在HTML页面上填写可增删行的动态行式报表过程中计算报表上表达式的轻量级方法。该方法首先生成动态行式报表,然后将报表上欲计算的表达式中单元格替换成特定的JS函数,在发布成HTML后即可直接应用JS的eva1函数计算表达式。本发明提供的表达式计算方法具有通用性、支持可增删行的动态填写以及实现效率高且容量小的优点。
文档编号G06Q10/00GK101093472SQ20071011123
公开日2007年12月26日 申请日期2007年6月18日 优先权日2007年6月18日
发明者蒋步星 申请人:北京润乾信息系统技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1