一种电子数据表、电子数据表的单元的计算方法和装置制造方法及图纸

技术编号:2918782 阅读:166 留言:0更新日期:2012-04-11 18:40
一种电子数据表计算方法,其特征在于,包括:a、将待计算单元压入堆栈;b、判断该单元公式的第一项/下一项是否具有待计算支持单元,是则将该支持单元压入堆栈;否则对该单元公式的第一项/下一项直接求值;c、对压入堆栈的支持单 元按步骤b求值,完成后将该支持单元弹出堆栈;d、重复步骤b、c,完成待计算单元的计算,并将该单元弹出堆栈。

【技术实现步骤摘要】

本专利技术涉及电子数据表处理,特别是涉及一种对电子数据表进行计算的方法和装置。
技术介绍
电子数据表(Spreadsheet)是以单元形式来组织数据及信息的计算工具软件,譬如Microsoft Excel,Lotus1-2-3,Borland Quattro Pro,LinuxGnumeric,WPS表格,永中Office等等。单元为电子数据表的最基本组成单元,其中可以包含计算公式,用以计算此单元的数值。电子数据表还可以预先设定或由二次开发者提供一些功能函数,这些函数可用于单元公式中,以方便用户使用。传统的电子数据表如Microsoft Excel利用单个计算链处理电子数据表中公式的计算和重算,该计算链在本质上是被输入到Excel当前载入的所有工作表中的全部公式的有序列表。在公式被输入到电子表格时,该公式被添加到全局计算链的开始。当通过修改公式所依赖的单元的内容或手动请求重算操作触发重算(recalc)操作时,Excel将会循环访问计算链中,并重新计算已经被标记为“脏”(即,等待重算)的任何公式。如对单元C4=A4+B4,代码从对第一个单元C4求值开始,在尝试对公式“=A4+B4”求值时,计算代码发现,该公式依赖于单元A4,并且单元A4是“脏的”,即是说仍然要计算。在这一情况中,单元C4的公式“=A4+B4”称为“依赖”公式,单元C4称为依赖单元,单元A4、B4称为支持单元,单元A4中的公式称为“支持”公式。代码停止对公式=A4+B4求值,将单元A4的公式压入计算链,并将其再次插入到紧靠在单元C4的公式之前。然后,计算代码从单元A4的公式开始,重新开始其工作。毫无问题,计算代码对A4求值,转移到C4。在尝试对公式=A4+B4求值时(第二次),计算代码得知A4现在已经被计算(不再“脏”),但发现公式也依赖于单元B4,并且B4也是“脏”的。这样,代码再次停止对该公式求值,并将B4的公式移到紧靠在C4的公式之前。然后,毫无问题,代码对B4求值,并转移到C4(现在是第三次)。现在可以对C4求值,完成该过程。该所述计算方法会频繁移动原计算链中的节点,并导致C4公式冗余的两次计算。特别的,对于C4=A4+B4+D4+E4+F4+G4+H4+I4,假设单元A4、B4、D4、E4、F4、G4、H4、I4都是“脏”的,则先把所有的单元节点移到单元C4前面,然后进行计算,在计算过程中,每遇到一个“脏”的单元,则把该“脏”单元计算完成后再重新计算C4,当遇到下一个“脏”单元时,前面的部分C4计算全部没用,引用计算到I4时才发现I4是“脏的”,前面的累加白费了,先算完I4再重来一遍,从而导致8次冗余计算。如果单元C4依赖更多的单元的话,所述节点的移动次数和冗余计算的次数则更多。对于极为复杂的电子数据表格,尤其在大型财务规划方案中,以上述方式完成长链式计算需要大量的处理时间,也会造成计算机系统资源的大量浪费。因此,迫切需要一种对电子数据表进行计算的方法和装置,在对电子数据表的全部单元或部分单元进行计算时,不需要频繁的移动单元节点,减少冗余计算的次数。
技术实现思路
本专利技术所要解决的技术问题是提供一种电子数据表的计算方法和装置,可以大大提高电子数据表整体或局部的计算速度。为了解决上述问题,本专利技术公开了一种电子数据表计算的方法,包括以下步骤a、将待计算单元压入堆栈;b、判断该单元公式的第一项/下一项是否具有待计算支持单元,是则将该支持单元压入堆栈;否则对该单元公式的第一项/下一项直接求值;c、对压入堆栈的支持单元按步骤b求值,完成后将该支持单元弹出堆栈;d、重复步骤b、c,完成待计算单元的计算,并将该单元弹出堆栈。依据另一实施例,还公开了一种电子数据表的计算方法,具体可以包括a、生成电子数据表的计算链;b、按计算链的顺序进行第一/下一单元的计算,将该待计算单元压入堆栈;c、判断该单元公式的第一项/下一项是否具有待计算支持单元,是则将该支持单元压入堆栈;否则对该单元公式的第一项/下一项直接求值;d、对压入堆栈的支持单元按步骤c求值,完成后将支持单元弹出堆栈; e、重复步骤c、d,完成待计算单元的计算,将该单元弹出堆栈,并返回步骤b,直到该计算链所有单元都计算完成。优选的,步骤a所述电子数据表计算链的生成步骤包括a1、解析电子数据表各单元间的依赖关系;a2、向计算链添加第一单元;a3、根据依赖关系查询该单元的依赖单元,将所述依赖单元添加到计算链的尾部;a4、根据依赖关系查询新添加单元的依赖单元,将所述新添加单元的依赖单元添加到计算链的尾部;a5、重复步骤a4至计算链的最后一个单元;a6、按照预置的遍历顺序将下一单元添加到计算链的尾部,对该单元按步骤a3、a4、a5完成计算链操作;a7、重复步骤a6,得到电子数据表的计算链。进一步,当计算链中已经存在要添加的单元时,不再添加该单元。优选的,所述方法进一步可以包括预设所述堆栈的容量临界值,当压入的单元个数达到临界值要发生堆栈溢出错误时,将压入堆栈中的各单元反序插入到计算链的待计算单元节点前,按照新的计算链重新计算。依据另一实施例,本专利技术还公开了一种电子数据表的计算装置,可以包括堆栈,用于缓存电子数据表单元;判断模块,判断压入堆栈的单元公式的第一项/下一项是否具有待计算支持单元,是则将该支持单元压入堆栈;否则对该单元公式的第一项/下一项直接求值;计算模块,对新压入的单元重复调用判断模块,完成待计算单元的计算,并弹出该单元。依据另一实施例,本专利技术还公开了另一种电子数据表的计算装置,可以包括堆栈,用于缓存电子数据表单元;计算链生成模块,用于生成电子数据表的计算链;判断模块,判断压入堆栈的单元公式的第一项/下一项是否具有待计算支持单元,是则将该支持单元压入堆栈;否则对该单元公式的第一项/下一项直接求值;计算模块,对新压入的单元重复调用判断模块,完成待计算单元的计算,并弹出该单元。进一步,该装置还可以包括异常处理模块,当压入堆栈的单元个数达到堆栈的预设容量临界值时,将压入堆栈中的各单元反序插入到计算链的待计算单元节点前,生成新的计算链。优选的,所述的计算链生成模块包括解析模块,用于解析电子数据表各单元间的依赖关系;置入模块,用于向计算链添加单元;查询模块,用于根据解析模块查询电子数据表中单元的依赖单元;生成模块,用于调用置入模块添加电子数据表第一单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部;以及,针对新添加单元的依赖单元重复调用查询模块和置入模块,直到计算链的尾部;以及,针对电子数据表下一单元再次重复调用置入模块、查询模块,得到电子数据表的计算链。优选的,对于计算链生成模块,当计算链中已经存在要添加的单元时,不调用置入模块添加该单元。与现有技术相比,本专利技术具有以下优点本专利技术在电子数据表的计算过程中增加了堆栈操作,当电子数据表单元待计算时,将其压入堆栈,如果该单元公式中的某一项具有待计算支持单元,则中断该依赖单元的计算,先完成支持单元的计算,再根据支持单元的值完成该待计算依赖单元的计算。当支持单元又依赖其它支持单元时,再次重复以上步骤,直至能够完成待计算单元的计算。从而使所涉及的支持单元能够在依赖单元之前完成计算,避免了在计算过程中单本文档来自技高网
...

【技术保护点】
一种电子数据表计算方法,其特征在于,包括:a、将待计算单元压入堆栈;b、判断该单元公式的第一项/下一项是否具有待计算支持单元,是则将该支持单元压入堆栈;否则对该单元公式的第一项/下一项直接求值;c、对压入堆栈的支持单 元按步骤b求值,完成后将该支持单元弹出堆栈;d、重复步骤b、c,完成待计算单元的计算,并将该单元弹出堆栈。

【技术特征摘要】

【专利技术属性】
技术研发人员:乔昕明
申请(专利权)人:金蝶软件中国有限公司
类型:发明
国别省市:94

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1