一种电子数据表计算链的生成方法和系统的制作方法

文档序号:6609249阅读:176来源:国知局
专利名称:一种电子数据表计算链的生成方法和系统的制作方法
技术领域
本发明涉及电子数据表处理,特别是涉及一种电子数据表计算链的生成方法和系统。
背景技术
电子数据表(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、根据依赖关系查询该单元的依赖单元,将所述依赖单元添加到计算链的尾部;d、根据依赖关系查询新添加单元的依赖单元,将所述新添加单元的依赖单元添加到计算链的尾部;e、重复步骤d至计算链的最后一个单元;f、按照预置的遍历顺序将下一单元添加到计算链的尾部,对该单元重复步骤c、d、e;g、重复步骤f,得到电子数据表的计算链。
优选的,当计算链中已经存在要添加的单元时,不再添加该单元。
该方法可以进一步包括根据该生成的计算链完成电子数据表的计算。
该方法还可以进一步包括所述生成的计算链用数组或链表存储。
依据说明书的另一实施例,本发明还公开了一种电子数据表当前单元计算链的生成系统,包括解析模块,用于解析电子数据表各单元间的依赖关系;置入模块,用于向计算链添加单元;查询模块,根据解析模块查询电子数据表中单元的依赖单元;
计算链生成模块,调用置入模块添加当前单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部;对新添加单元再次重复调用查询模块、置入模块,将当前单元的直接依赖单元和间接依赖单元都添加至计算链中,得到电子数据表当前单元的计算链。
优选的,当计算链中已经存在要添加的单元时,则不调用置入模块添加该单元。该系统还可以进一步包括存储模块,以数组或链表存储生成的计算链。
依据说明书的另一实施例,本发明还公开了一种电子数据表计算链的生成系统,包括解析模块,用于解析电子数据表各单元间的依赖关系;置入模块,用于向计算链添加单元;查询模块,用于根据解析模块查询电子数据表中单元的依赖单元;计算链生成模块,用于调用置入模块添加电子数据表第一单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部;以及,针对新添加单元的依赖单元重复调用查询模块和置入模块,直到计算链的尾部;以及,针对电子数据表下一单元再次重复调用置入模块、查询模块,得到电子数据表的计算链。
优选的,对于计算链生成模块,当计算链中已经存在要添加的单元时,则不调用置入模块添加该单元。该系统还可以进一步包括存储模块,以数组或链表存储生成的计算链。该系统还可以进一步包括运算模块,用于根据生成的计算链完成电子数据表的运算。
与现有技术相比,本发明具有以下优点由于在对电子数据表进行处理前,通过解析电子数据表各单元间的依赖关系,从而生成计算链,所以在处理过程中就不再需要频繁的移动各单元节点,提高了效率,节省了计算机系统资源。特别在对电子数据表进行计算时,把边计算边生成计算链的方法,优化为先生成计算链,然后再根据该生成的计算链完成电子数据表的计算,从而避免了在计算过程中单元节点的反复移动,并能够减少冗余运算,对电子数据表计算效率的提高明显,并大大节省了计算机系统资源。


图1是本发明实施例一种电子数据表当前单元计算链的生成方法的流程图;图2是本发明实施例一种电子数据表计算链的生成方法的流程图;图3是本发明实施例一种电子数据表计算链生成方法的流程图;图4是本发明实施例一种电子数据表当前单元计算链生成系统的结构框图;图5是本发明实施例一种电子数据表计算链生成系统的结构框图。
具体实施例方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。
本发明的核心思想是先构建电子数据表中各单元间的依赖关系,构建各单元间的依赖关系在不同的电子数据表的实现方式不同,但原理是相似的当一个单元内容发生变化时要通知依赖此单元的其他单元,并更新各自的内容。然后按照一定的遍历顺序向计算链中添加支持单元,查询该单元的依赖单元,将它们依次添加到计算链的尾部,从计算链中支持单元的第一个依赖单元开始,查询该单元的依赖单元,将它们依次添加到计算链的尾部;如此循环直到计算链尾部,从而将直接和间接依赖于支持单元的所有单元都添加进了计算链。按遍历顺序完成全部单元的添加,生成电子数据表的计算链。此时生成的整个计算链已经基本上保持了支持单元先进行计算的顺序。通过本发明,把边计算边生成计算链的方法,优化为先生成计算链,然后再根据该生成的计算链完成电子数据表的计算,这样避免了在计算过程中单元节点的反复移动,并能够减少冗余运算,利用该生成的计算链对电子数据表进行运算等处理时效率有明显的提高,并大大节省了计算机系统资源。
本发明可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本发明所述的电子数据表计算链的生成方法可以用于整张电子数据表所有单元,也可以用于完成对其部分区域单元或单个单元计算链的生成。
参照图1,示出了本发明一种电子数据表当前单元计算链的生成方法的流程图,包括以下步骤步骤101、构建各单元间的依赖关系。
电子数据表通常由多个单元组成,这些单元相互之间有可能存在相互依赖的关系。如单元公式C4=A4+B4,单元C4依赖于单元A4和单元B4,则所述单元C4为依赖单元,所述单元A4、B4为支持单元。在电子数据表中,依赖单元和支持单元并不是固定的,是可以相互转化的,即依赖单元可能是其他单元的支持单元。如D4=C4+E4中,C4则是支持单元,D4是依赖单元。因此,在电子数据表中存在这样一种情况,一个支持单元的依赖单元是另一单元的支持单元。因为依赖单元依赖于支持单元,所以在电子数据表的计算等处理过程中,应该先对支持单元进行处理,当依赖单元的所有支持单元都处理后才能完成依赖单元的处理。
根据电子数据表各单元间的关系构建依赖关系,所述构建的原则是使支持单元在计算链中尽量位于依赖单元之前。对电子数据表中的单元构建这样的依赖关系有多种可实现的方法,如遍历所有单元,解析语法树,生成一个包含依赖关系的数据结构。具体来说,对于C4=A4+B4,首先A4、B4是单元C4的支持单元,C4是依赖单元,解析A4、B4生成语法树的过程中,公式解析器识别了被依赖者A4和B4,从而建立依赖关系。
所述依赖关系数据结构的要求是可用电子数据表的单元作为“键值”来高效查询,用哈希表或者排序数组都可实现。单元的“键值”所指向的“值域”是个集合,用来包含依赖单元。
步骤102、向计算链尾部添加当前单元。
步骤103、查询该单元的依赖单元。
在步骤101中已经构建好电子数据表中各单元间的依赖关系,因此,在本步骤中,以单元的“键值”或其他方法在依赖关系中进行查询即可得到该单元的依赖单元。考虑计算效率,步骤101中解析的单元语法树和构建的依赖关系需要缓存。一般会在文件打开时构建单元语法树。特别的,不一定要构建所有单元的语法树,如只构建当前活动表页的,其它表页的采用懒惰模式构建。或者将语法树、依赖关系保存在了文件里,直接加载即可。因此,通过构建的所述依赖关系数据结构,可以很容易的查询到各个单元的依赖单元。
步骤104、将通过查询得到的各依赖单元添加到计算链的尾部。
在电子数据表中,一个单元的依赖单元通常有多个,如果是多个依赖单元,则将该多个依赖单元依次添加到计算链的尾部。
步骤105、根据依赖关系查询新添加单元的依赖单元,并添加至计算链的尾部。
重复该步骤至计算链的最后一个单元,将当前单元的所有直接和间接依赖单元都添加至计算链中。
从第一个依赖单元开始遍历至计算链尾部,将遍历到的每一个单元的依赖单元添加到计算链尾部。当计算链尾部不再增长时,则当前单元的所有直接和间接依赖单元都全部添加到了计算链中。
通过本方法生成的计算链,当一个单元内容发生变化时通知依赖此单元的其他单元,并更新各自的内容。进一步,当要添加的单元已经被添加到计算链中时,则不再向计算链中添加该单元。因为电子数据表的单元是一个实现了“可计算接口”的小对象,可计算接口的其中一个方法就是设置“已添加”标记,所以在将单元添加到计算链中时,对单元做“已添加”标记表明此单元已加入计算链,从而当有相同的单元要添加时,通过该“已添加”标志就可以实现不再重复添加。从而能够节省系统资源,也能提高效率。此时整个计算链已经基本上保证了支持单元先处理。
进一步,对于生成的计算链,可以采用数组或链表的方式进行存储,无论采用哪种方式,在访问效率、插入操作和内存占用成本上都各有千秋。当然也可以采用其它的方式对计算链进行存储,本发明并不对此进行限定。
进一步,还可以包括一个计算步骤,通过该生成的计算链,完成当前单元及其依赖单元的计算。
从总体上讲,本发明方法基本保持了被依赖单元先进行计算的顺序,从而部分避免了计算链节点移动和冗余计算,提高了计算效率。本发明方法在生成计算链的过程中大量应用了依赖关系查询,相对于单元公式冗余计算的耗用来讲,代价是合理的,电子数据表的整体处理效率有显著提升。
参照图2,示出了本发明一种电子数据表计算链的生成方法的流程图,与图1所示方法的区别在于本方法是针对电子数据表的全部单元或选定的部分单元生成计算链。包括步骤步骤201、构建各单元间的依赖关系。
电子数据表通常由多个单元组成,这些单元相互之间有可能存在相互依赖的关系。根据电子数据表各单元的关系构建依赖关系,所述构建的原则是使支持单元在计算链中尽量位于依赖单元之前。对电子数据表中的单元构建这样的依赖关系有多种可实现的方法,如遍历所有单元,解析语法树,生成一个包含依赖关系的数据结构。所述依赖关系数据结构的要求是可用电子数据表的单元作为“键值”来高效查询,用哈希表或者排序数组都可实现。单元的“键值”所指向的“值域”是个集合,用来包含依赖单元。
步骤202、向计算链尾部添加第一单元。
步骤203、查询该单元的依赖单元。
步骤2 04、将所述依赖单元添加到计算链的尾部。
在步骤201中已经构建好电子数据表中各单元间的依赖关系,因此,在本步骤中,以单元的“键值”或其他方法在依赖关系中进行查询即可得到该单元的依赖单元。
步骤205、按照预置的遍历顺序将下一单元添加到计算链的尾部,查询该单元的依赖单元,并将该依赖单元添加到计算链的尾部,重复该步骤,直至所有单元都添加到计算链。
所述遍历顺序是可以是先行后列,也可以是先列后行,采用什么样的遍历顺序对本发明方法无影响,本发明也对此不加以限制。
进一步,当要添加的单元已经被添加到计算链中时,则不再向计算链中添加该单元。因为电子数据表的单元是一个实现了“可计算接口”的小对象,可计算接口的其中一个方法就是设置“已添加”标记,所以在将单元添加到计算链中时,对该单元做“已添加”标记表明此单元已加入计算链,当有相同的单元要添加时,通过该“已添加”标志就可以实现不再重复添加。从而能够节省系统资源,也能提高效率。此时整个计算链已经基本上保持了被依赖单元先进行处理的顺序。
参照图3,示出了本发明一种电子数据表计算链生成方法的流程图,包括步骤步骤301、构建各单元间的依赖关系。
电子数据表通常由多个单元组成,这些单元相互之间有可能存在相互依赖的关系。如单元公式C4=A4+B4,单元C4依赖于单元A4和单元B4,则所述单元C4为依赖单元,所述单元A4、B4为支持单元。在电子数据表中,依赖单元和支持单元并不是固定的,是可以相互转化的,即依赖单元在其他公式中可能就是支持单元了。如D4=C4+E4中,C4是支持单元,D4是依赖单元。因此,在电子数据表中存在这样一种情况,一个支持单元的依赖单元是另一单元的支持单元。因为依赖单元依赖于支持单元,所以在电子数据表的计算等处理过程中,都是对支持单元先进行处理,当依赖单元的所有支持单元都处理后才能完成依赖单元的处理。
根据电子数据表各单元的关系构建依赖关系,所述构建的原则是使支持单元在计算链中尽量位于依赖单元之前。对电子数据表中的单元构建这样的依赖关系有多种可实现的方法,如遍历所有单元,解析语法树,生成一个包含依赖关系的数据结构。具体来说,对于C4=A4+B4,首先A4、B4是单元C4的支持单元,C4是依赖单元,解析A4、B4生成语法树的过程中,公式解析器识别了被依赖者A4和B4,从而建立依赖关系。
所述依赖关系数据结构的要求是可用电子数据表的单元作为“键值”来高效查询,用哈希表或者排序数组都可实现。单元的“键值”所指向的“值域”是个集合,用来包含依赖单元。
步骤302、向计算链中添加第一单元。
步骤303、查询该单元的依赖单元,将所述依赖单元添加到计算链的尾部。
在步骤301中已经构建好电子数据表中各单元间的依赖关系,因此,在本步骤中,以单元的“键值”或其他方法在依赖关系中进行查询即可得到该单元的依赖单元。考虑计算效率,步骤301中解析系单元语法树和构建的依赖关系需要缓存。一般会在文件打开时构建单元语法树。不一定要构建所有单元的语法树,在特别情况下,只构建当前活动表页的,其它表页的采用懒惰模式构建。或者将语法树、依赖关系保存在了文件里,直接加载即可。因此,通过构建的所述依赖关系数据结构,可以很容易的查询到各个单元的依赖单元。在电子数据表中,一个单元的依赖单元通常有多个,如果是多个依赖单元,则将该多个依赖单元依次添加到计算链该支持单元的后面。
步骤304、查询该新添加单元的依赖单元、将所述新添加单元的依赖单元添加到计算链的尾部。
该新添加的单元虽然是前一个支持单元的依赖单元,但在电子数据表中,它可能是其他单元的支持单元,根据依赖关系查询该新添加单元的依赖单元、将所述新添加单元的依赖单元添加到计算链的尾部。
当添加的单元有多个时,对每一个新添加的单元都重复步骤304,即从计算链紧接支持单元之后的单元开始,查询依赖于此单元的依赖单元,将它们依次添加到计算链的尾部;如此循环直到计算链的尾部。这样就将直接和间接依赖于支持单元的所有单元都添加进了计算链。
步骤305、按照预置的遍历顺序将下一单元添加到计算链的尾部,重复步骤303、304,将该支持单元的所有直接依赖和间接依赖单元都添加到计算链。如果还存在下一单元,则重复步骤305,直至所有单元都遍历完成,则结束,生成电子数据表的计算链。
所述遍历顺序是可以是先行后列,也可以是先列后行,采用什么样的遍历顺序对本发明方法无影响,本发明也对此不加以限制。
进一步,当要添加的单元已经被添加到计算链中时,则不再向计算链中添加该单元。因为电子数据表的单元是一个实现了“可计算接口”的小对象,可计算接口的其中一个方法就是设置“已添加”标记,所以在将单元添加到计算链中时,对该单元做“已添加”标记表明此单元已加入计算链,当有相同的单元要添加时,通过该“已添加”标志就可以实现不再重复添加。从而能够节省系统资源,也能提高效率。此时整个计算链已经基本上保持了被依赖单元先进行处理的顺序。
进一步,对于生成的计算链,可以采用数组或链表的方式进行存储,无论采用哪种方式,在访问效率、插入操作和内存占用成本上都各有千秋。当然也可以采用其它的方式对计算链进行存储,本发明并不对此进行限定。
进一步,还可以包括步骤一个计算步骤,通过该生成的计算链,完成整个电子数据表或电子数据表中选定单元的计算。
下面以一个例子详细说明本发明电子数据表计算链的生成方法。所述电子数据表为

按照先行后列的顺序访问上列单元,组织计算链时考虑当前单元的依赖者,[]内为当前单元第一步、按照行列循环,将A1加入计算链{A1};第二步、[A1]将A1的依赖者[B1,C1,C3]加入计算链{A1,B1,C1,C3};从B1开始,按照计算链顺序循环至计算链结束第三步、[B1]试图将B1的依赖者C1加入计算链,但C1已在计算链中,不再添加;第四步、[B1]将B1的依赖者B2加入计算链{A1,B1,C1,C3,B2};第五步、[C1]C1无依赖者;第六步、[C3]试图将C3的依赖者B1加入计算链,但B1已在计算链中,不再添加;第七步、[B2]B2无依赖者;第八步、按照行列循环,试图将B1加入计算链,但B1已在计算链中,不再添加;
第九步、按照行列循环,试图将C1加入计算链,但C1已在计算链中,不再添加;第十步、按照行列循环,试图将A2加入计算链,但A2是常量无需计算,不再添加;第十一步、按照行列循环,试图将B2加入计算链,但B2已在计算链中,不再添加;第十二步、按照行列循环,试图将C2加入计算链,但C2是常量无需计算,不再添加;第十三步、按照行列循环,试图将A3加入计算链,但A3是常量无需计算,不再添加;第十四步、按照行列循环,将B3加入计算链{A1,B1,C1,C3,B2,B3};第十五步、[B3]试图将B3的依赖者A1加入计算链,但A1已在计算链中,不再添加;第十六步、按照行列循环,试图将C3加入计算链,但C3已在计算链中,不再添加;第十七步、行列循环完成,生成该电子数据表的计算链,最终结果{A1,B1,C1,C3,B2,B3}。
参照图4、示出了本发明一种电子数据表当前单元计算链生成系统的结构框图,包括解析模块401、用于解析电子数据表各单元间的依赖关系,构建依赖关系。
根据电子数据表各单元的关系构建依赖关系,所述构建的原则是使支持单元在计算链中尽量位于依赖单元之前。对电子数据表中的单元构建这样的依赖关系有多种可实现的方法,如遍历所有单元,解析语法树,生成一个包含依赖关系的数据结构。所述依赖关系数据结构的要求是可用电子数据表的单元作为“键值”来高效查询,用哈希表或者排序数组都可实现。单元的“键值”所指向的“值域”是个集合,用来包含依赖单元。
置入模块402、用于向计算链添加单元。
查询模块403、根据解析模块查询电子数据表中单元的依赖单元。
以单元的“键值”或其他方法在依赖关系中进行查询即可得到该单元的依赖单元。
计算链生成模块404、调用置入模块添加当前单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部,对新添加单元再次重复调用查询模块、置入模块,将当前单元的所有直接依赖单元和间接依赖单元都添加至计算链中,生成电子数据表当前单元的计算链。
进一步,当要添加的单元已经被添加到计算链中时,则不再向计算链中添加该单元。因为电子数据表的单元是一个实现了“可计算接口”的小对象,可计算接口的其中一个方法就是设置“已添加”标记,所以在将单元添加到计算链中时,对单元做“已添加”标记表明此单元已加入计算链,从而当有相同的单元要添加时,通过该“已添加”标志就可以实现不再重复添加。从而能够节省系统资源,也能提高效率。此时整个计算链已经基本上保持了被依赖单元先进行计算的顺序。
进一步,对于生成的计算链,可以采用数组或链表的方式进行存储,无论采用哪种方式,在访问效率、插入操作和内存占用成本上都各有千秋。当然也可以采用其它的方式对计算链进行存储,本发明并不对此进行限定。
进一步,还可以包括一个运算模块,通过该生成的计算链,完成当前单元及其依赖单元的运算。
参照图5,示出了本发明一种电子数据表计算链生成系统的结构框图,包括解析模块501、用于解析电子数据表各单元间的依赖关系。
根据电子数据表各单元的关系构建依赖关系,所述构建的原则是使支持单元在计算链中尽量位于依赖单元之前。对电子数据表中的单元构建这样的依赖关系有多种可实现的方法,如遍历所有单元,解析语法树,生成一个包含依赖关系的数据结构。所述依赖关系数据结构的要求是可用电子数据表的单元作为“键值”来高效查询,用哈希表或者排序数组都可实现。单元的“键值”所指向的“值域”是个集合,用来包含依赖单元。
置入模块502、用于向计算链添加单元。
查询模块503、根据解析模块查询电子数据表中单元的依赖单元。
以单元的“键值”或其他方法在依赖关系中进行查询即可得到该单元的依赖单元。
计算链生成模块504、调用置入模块添加第一单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部,对新添加的单元,重复调用查询模块和置入模块添加该新添加单元的依赖单元,直到计算链的尾部,这样就将直接和间接依赖于支持单元的所有单元都添加进了计算链。对下一单元再次重复调用置入模块、查询模块,生成电子数据表的计算链。
进一步,当要添加的单元已经被添加到计算链中时,则不再向计算链中添加该单元。因为电子数据表的单元是一个实现了“可计算接口”的小对象,可计算接口的其中一个方法就是设置“已添加”标记,所以在将单元添加到计算链中时,对单元做“已添加”标记表明此单元已加入计算链,从而当有相同的单元要添加时,通过该“已添加”标志就可以实现不再重复添加。从而能够节省系统资源,也能提高效率。此时整个计算链已经基本上保持了被依赖单元先进行计算的顺序。
进一步,对于生成的计算链,可以采用数组或链表的方式进行存储,无论采用哪种方式,在访问效率、插入操作和内存占用成本上都各有千秋。当然也可以采用其它的方式对计算链进行存储,本发明并不对此进行限定。
进一步,还可以包括一个运算模块,通过该生成的计算链,完成整个电子数据表或电子数据表选定单元的运算。
图4、5、所示系统中未详述的部分可以参见图1、2、3所示方法的相关部分,为了篇幅考虑,在此不再详述。
以上对本发明所提供的一种电子数据表及当前单元格的计算链生成方法和系统,进行了详细介绍说明,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种电子数据表当前单元计算链的生成方法,其特征在于,包括解析电子数据表各单元间的依赖关系;向计算链添加当前单元;根据依赖关系查询当前单元的依赖单元,并添加至计算链尾部;根据依赖关系查询新添加单元的依赖单元,并添加至计算链的尾部,重复该步骤至计算链的最后一个单元,将当前单元的直接依赖单元和间接依赖单元都添加至计算链中。
2.如权利要求1所述的方法,其特征在于当计算链中已经存在要添加的单元时,不再添加该单元。
3.如权利要求2所述的方法,其特征在于,进一步包括根据该生成的计算链完成当前单元及其依赖单元的计算。
4.如权利要求2所述的方法,其特征在于,进一步包括所述生成的计算链用数组或链表存储。
5.一种电子数据表计算链的生成方法,其特征在于,包括解析电子数据表各单元间的依赖关系;向计算链中添加第一单元;根据依赖关系查询该单元的依赖单元;将所述依赖单元添加到计算链的尾部;按照预置的遍历顺序将下一单元添加到计算链的尾部,查询该单元的依赖单元,并将该依赖单元添加到计算链的尾部,重复该步骤,直至所有单元都添加到计算链。
6.一种电子数据表计算链的生成方法,其特征在于,包括a、解析电子数据表各单元间的依赖关系;b、向计算链添加第一单元;c、根据依赖关系查询该单元的依赖单元,将所述依赖单元添加到计算链的尾部;d、根据依赖关系查询新添加单元的依赖单元,将所述新添加单元的依赖单元添加到计算链的尾部;e、重复步骤d至计算链的最后一个单元;f、按照预置的遍历顺序将下一单元添加到计算链的尾部,对该单元重复步骤c、d、e;g、重复步骤f,得到电子数据表的计算链。
7.如权利要求6所述的方法,其特征在于当计算链中已经存在要添加的单元时,不再添加该单元。
8.如权利要求7所述的方法,其特征在于,进一步包括根据该生成的计算链完成电子数据表的计算。
9.如权利要求7所述的方法,其特征在于,进一步包括所述生成的计算链用数组或链表存储。
10.一种电子数据表当前单元计算链的生成系统,其特征在于,包括解析模块,用于解析电子数据表各单元间的依赖关系;置入模块,用于向计算链添加单元;查询模块,根据解析模块查询电子数据表中单元的依赖单元;计算链生成模块,调用置入模块添加当前单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部;对新添加单元再次重复调用查询模块、置入模块,将当前单元的直接依赖单元和间接依赖单元都添加至计算链中,得到电子数据表当前单元的计算链。
11.如权利要求10所述的系统,其特征在于当计算链中已经存在要添加的单元时,则不调用置入模块添加该单元。
12.如权利要求10所述的系统,其特征在于,进一步包括存储模块,以数组或链表存储生成的计算链。
13.一种电子数据表计算链的生成系统,其特征在于,包括解析模块,用于解析电子数据表各单元间的依赖关系;置入模块,用于向计算链添加单元;查询模块,用于根据解析模块查询电子数据表中单元的依赖单元;计算链生成模块,用于调用置入模块添加电子数据表第一单元至计算链中,调用查询模块查询该单元的依赖单元,并再次调用置入模块将所述依赖单元添加到计算链的尾部;以及,针对新添加单元的依赖单元重复调用查询模块和置入模块,直到计算链的尾部;以及,针对电子数据表下一单元再次重复调用置入模块、查询模块,得到电子数据表的计算链。
14.如权利要求13所述的系统,其特征在于对于计算链生成模块,当计算链中已经存在要添加的单元时,则不调用置入模块添加该单元。
15.如权利要求13所述的系统,其特征在于,进一步包括存储模块,以数组或链表存储生成的计算链。
16.如权利要求15所述的系统,其特征在于,进一步包括运算模块,根据生成的计算链完成电子数据表的运算。
全文摘要
本发明提供了一种电子数据表计算链的生成方法和系统,所述方法可以包括以下步骤解析电子数据表各单元间的依赖关系;向计算链中添加第一单元;根据依赖关系查询该单元的依赖单元;将所述依赖单元添加到计算链的尾部;按照预置的遍历顺序将下一单元添加到计算链的尾部,查询该单元的依赖单元,并将该依赖单元添加到计算链的尾部,重复该步骤,直至所有单元都添加到计算链。从而避免了在计算过程中单元节点的反复移动,并能够减少冗余运算,对电子数据表计算效率的提高明显,并大大节省了计算机系统资源。
文档编号G06F17/30GK101055567SQ200710105709
公开日2007年10月17日 申请日期2007年5月25日 优先权日2007年5月25日
发明者乔昕明 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1