CN101055567A - 一种电子数据表计算链的生成方法和系统 - Google Patents
一种电子数据表计算链的生成方法和系统 Download PDFInfo
- Publication number
- CN101055567A CN101055567A CN 200710105709 CN200710105709A CN101055567A CN 101055567 A CN101055567 A CN 101055567A CN 200710105709 CN200710105709 CN 200710105709 CN 200710105709 A CN200710105709 A CN 200710105709A CN 101055567 A CN101055567 A CN 101055567A
- Authority
- CN
- China
- Prior art keywords
- unit
- chain
- dependence
- calculating
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明提供了一种电子数据表计算链的生成方法和系统,所述方法可以包括以下步骤:解析电子数据表各单元间的依赖关系;向计算链中添加第一单元;根据依赖关系查询该单元的依赖单元;将所述依赖单元添加到计算链的尾部;按照预置的遍历顺序将下一单元添加到计算链的尾部,查询该单元的依赖单元,并将该依赖单元添加到计算链的尾部,重复该步骤,直至所有单元都添加到计算链。从而避免了在计算过程中单元节点的反复移动,并能够减少冗余运算,对电子数据表计算效率的提高明显,并大大节省了计算机系统资源。
Description
技术领域
本发明涉及电子数据表处理,特别是涉及一种电子数据表计算链的生成方法和系统。
背景技术
电子数据表(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,直至所有单元都遍历完成,则结束,生成电子数据表的计算链。
所述遍历顺序是可以是先行后列,也可以是先列后行,采用什么样的遍历顺序对本发明方法无影响,本发明也对此不加以限制。
进一步,当要添加的单元已经被添加到计算链中时,则不再向计算链中添加该单元。因为电子数据表的单元是一个实现了“可计算接口”的小对象,可计算接口的其中一个方法就是设置“已添加”标记,所以在将单元添加到计算链中时,对该单元做“已添加”标记表明此单元已加入计算链,当有相同的单元要添加时,通过该“已添加”标志就可以实现不再重复添加。从而能够节省系统资源,也能提高效率。此时整个计算链已经基本上保持了被依赖单元先进行处理的顺序。
进一步,对于生成的计算链,可以采用数组或链表的方式进行存储,无论采用哪种方式,在访问效率、插入操作和内存占用成本上都各有千秋。当然也可以采用其它的方式对计算链进行存储,本发明并不对此进行限定。
进一步,还可以包括步骤一个计算步骤,通过该生成的计算链,完成整个电子数据表或电子数据表中选定单元的计算。
下面以一个例子详细说明本发明电子数据表计算链的生成方法。所述电子数据表为:
A | B | C | |
1 | =4*B3 | =A1*C3 | =A1+B1+C2 |
2 | 3 | =3*B1 | 5 |
3 | 2 | =A3*4 | =A1*A3 |
按照先行后列的顺序访问上列单元,组织计算链时考虑当前单元的依赖者,[]内为当前单元:
第一步、按照行列循环,将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所示方法的相关部分,为了篇幅考虑,在此不再详述。
以上对本发明所提供的一种电子数据表及当前单元格的计算链生成方法和系统,进行了详细介绍说明,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (16)
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所述的系统,其特征在于,进一步包括:
运算模块,根据生成的计算链完成电子数据表的运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101057098A CN100483395C (zh) | 2007-05-25 | 2007-05-25 | 一种电子数据表计算链的生成方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101057098A CN100483395C (zh) | 2007-05-25 | 2007-05-25 | 一种电子数据表计算链的生成方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101055567A true CN101055567A (zh) | 2007-10-17 |
CN100483395C CN100483395C (zh) | 2009-04-29 |
Family
ID=38795406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101057098A Active CN100483395C (zh) | 2007-05-25 | 2007-05-25 | 一种电子数据表计算链的生成方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100483395C (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102289429A (zh) * | 2010-06-17 | 2011-12-21 | 微软公司 | 反编译电子表格中的循环 |
CN102508990A (zh) * | 2011-09-28 | 2012-06-20 | 北京像素软件科技股份有限公司 | 一种网络游戏的数据更新方法 |
CN106445968A (zh) * | 2015-08-11 | 2017-02-22 | 阿里巴巴集团控股有限公司 | 一种数据合并方法及装置 |
WO2017124959A1 (zh) * | 2016-01-21 | 2017-07-27 | 阿里巴巴集团控股有限公司 | 一种数据表分析处理的方法和装置 |
CN110059301A (zh) * | 2019-03-12 | 2019-07-26 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、电子设备和计算机可读存储介质 |
-
2007
- 2007-05-25 CN CNB2007101057098A patent/CN100483395C/zh active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102289429A (zh) * | 2010-06-17 | 2011-12-21 | 微软公司 | 反编译电子表格中的循环 |
CN102508990A (zh) * | 2011-09-28 | 2012-06-20 | 北京像素软件科技股份有限公司 | 一种网络游戏的数据更新方法 |
CN106445968A (zh) * | 2015-08-11 | 2017-02-22 | 阿里巴巴集团控股有限公司 | 一种数据合并方法及装置 |
WO2017124959A1 (zh) * | 2016-01-21 | 2017-07-27 | 阿里巴巴集团控股有限公司 | 一种数据表分析处理的方法和装置 |
CN110059301A (zh) * | 2019-03-12 | 2019-07-26 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、电子设备和计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN100483395C (zh) | 2009-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1229944A (zh) | 用于减少预装类的脚印的系统和方法 | |
CN101055567A (zh) | 一种电子数据表计算链的生成方法和系统 | |
CN101034990A (zh) | 权限管理方法及装置 | |
CN1767453A (zh) | 自动测试方法和系统 | |
CN101042649A (zh) | 一种配置信息处理方法及装置以及平台系统 | |
CN1755633A (zh) | 用于电子表格链式计算的多线程处理的方法和系统 | |
CN1851693A (zh) | 一种对系统资源进行管理的实现方法 | |
CN101042645A (zh) | 统一软件开发环境的方法、设备及系统 | |
CN1908931A (zh) | 一种文字的可变数据排版的方法 | |
CN1975739A (zh) | 报表生成方法、设备及系统 | |
CN1913442A (zh) | 给用户提供业务服务的方法和系统 | |
CN1975668A (zh) | 一种支持多语言的系统及输入、读取多语言数据的方法 | |
CN1805345A (zh) | Web服务工作流处理器 | |
CN1848111A (zh) | 用于内存数据库的一种数据操作接口的实现方法 | |
CN1889048A (zh) | 组件的实现方法以及系统 | |
CN1822596A (zh) | 一种客户/服务器架构中的数据处理方法 | |
CN1949221A (zh) | 存储元素的方法与系统及查找元素的方法与系统 | |
CN101030228A (zh) | 页面导航方法和装置及应用服务器 | |
CN1677932A (zh) | 网络管理配置方法及其装置 | |
CN101051316A (zh) | 数据查找方法、系统及设备 | |
CN1863085A (zh) | 保证网管和网元配置数据一致性的方法及系统 | |
CN101055568A (zh) | 一种电子数据表的计算方法和装置 | |
CN1862267A (zh) | 对电路原理图进行审查的方法 | |
CN1808434A (zh) | 基于对象存储库的对象引用方法 | |
CN1300395A (zh) | 处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |