【技术实现步骤摘要】
本专利技术属于计算机信息处理
,涉及一种报表的计算方法,具体涉及一种基于非线性报表生成方法、可处理单元格间计算引用关系的高效计算方法,或称为非线性报表的单次遍法算法。
技术介绍
在报表计算中需要考虑单元格之间的引用关系(显然,必须把表达式中引用到的单元格都计算出来之后才能计算本表达式的值)。对于静态报表,可以将所有单元格根据引用关系排成一个序列,使得被引用的单元格总是在引用其的单元格的前面,如果不存在这么一个序列,则可以认定报表中出现了循环引用现象而无法正常计算。然而,对于非线性报表生成方法(其它动态报表生成方案也有类似问题)中,报表中的单元格是在计算过程中不断扩展复制的,即单元格的数量在计算过程中是不断变化的,在计算之初不存在一个完整的单元格序列,这时就不可能事先对报表上单元格根据引用关系排序。目前主要有两种方法处理这个问题1.原格排序法即对原始单元格进行引用排序,然后依次计算。但是同一个原始单元格在生成后的报表中对应了多个复制出来的单元格,原始格引用时并不总意味着其对应的生成单元格也互相引用,因此这种方法只能针对计算关系较简单的报表,这样将导致有许多原始格循环引用但实际不循环引用的报表无法计算(如计算累积值会引用自身将被认为是原始格循环引用)。2.多次遍历法按某种次序计算所有单元格,当发现引用了尚未计算单元格的单元格时暂先放弃,而去计算下一个单元格,遍历过全部单元格后再从头重复这一过程,直到报表上不再有任何未计算的单元格(计算完成)或一次遍历过程中报表上单元格数量未增多(没有执行扩展操作)且未计算的单元格数并未减少(发生循环引用)时停止。多次 ...
【技术保护点】
一种非线性报表的单次遍历算法,包括如下步骤:(1)记报表上第一个单元格为c;(2)检查c是否已经计算,如果已计算则转到(8);(3)记数组q=(c);(4)如果q已是空集,则转到(8);(5)设u是q 中最后一个元素,试计算或扩展u,如果成功则将u从q中删除,并转到(4)重复运行;(6)u计算失败时,取出一个u引用的未计算单元格v,如果v已经在q中,则算法结束并报告报表上有循环引用。(7)将v添到加q的最后面,转到(5)继 续执行;(8)在报表上取出c的下一个单元格取代c,转到(2)继续执行,如果c已是最后一个单元格,则算法结束并报告报表计算完毕。
【技术特征摘要】
1.一种非线性报表的单次遍历算法,包括如下步骤(1)记报表上第一个单元格为c;(2)检查c是否已经计算,如果已计算则转到(8);(3)记数组q=(c);(4)如果q已是空集,则转到(8);(5)设u是q中最后一个元素,试计算或扩展u,如果成功则将u从q中删除,并转到(4)重复运行;(6)u计算失败时,取出一个u引用的未计算单元格v,如果v已经在q中,则算法结束并报告报表上有循环引用。(7)将v添到加q的最后面,转到(...
【专利技术属性】
技术研发人员:蒋步星,
申请(专利权)人:北京润乾信息系统技术有限公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。