一种电子数据表的函数收集方法和装置的制作方法

文档序号:6609248阅读:304来源:国知局
专利名称:一种电子数据表的函数收集方法和装置的制作方法
技术领域
本发明涉及计算机数据处理领域,特别是涉及一种电子数据表的函数收集方法和装置。
背景技术
电子数据表(Spreadsheet)是以表格形式来组织数据及信息的计算工具软件,譬如Microsoft Excel,Lotus1-2-3,Borland Quattro Pro,LinuxGnumeric,WPS表格,永中Office等等。
单元格为电子数据表的最基本组成单元,其中可以包含计算公式,用以计算此单元格的数值。电子数据表还可以预先设定或由二次开发者提供一些功能函数,这些函数可用于单元公式中,以方便用户使用。
譬如SUM(number1,number2,...)函数,一般用于数据合计;AVERAGE(number1,number2,...)函数一般用于返回参数的平均值(算术平均值)。其中参数(number1,number2,...)可以是数字,或者是包含数字的名称、数组或引用,也就是说上述的参数可以为数字数组,也可以为本数据表中的单元格或者其他数据表中的单元格。
电子数据表还可以预先设定更为复杂的函数,例如在Microsoft Excel中的DDB(cost,salvage,life,period,factor)函数,一般用于使用双倍余额递减法或其他指定方法,计算一笔资产在给定期间内的折旧值。其中的参数Cost为资产原值;Salvage为资产在折旧期末的价值(也称为资产残值);Life为折旧期限(有时也称作资产的使用寿命);Period为需要计算折旧值的期间,Period必须使用与life相同的单位;Factor为余额递减速率,如果factor被省略,则假设为2(双倍余额递减法)。
而二次开发者提供的功能函数一般更为复杂,譬如ERP电子数据表系统中的ACCT函数用于从其它信息系统中提取财务数据。
总之,电子数据表中单元格能够使用的公式或者函数非常多,但是传统的电子表格程序如Microsoft Excel是利用单个计算链处理电子表格中公式的计算和重算,该计算链在本质上是被输入到Excel当前载入的所有工作表中的全部公式的有序列表。即现有技术中的电子数据表统筹安排其中各单元格的单元公式的计算顺序,以解释或编译执行的方式顺次执行计算单元公式,位于各个单元公式中的函数也被顺次调用,从而依次完成整张电子数据表的数据处理。
但是在实际应用中,发现上述处理过程在复杂的财务数据处理过程中,存在以下的技术问题都需要对整张电子数据表中的同一函数进行重复调用,而同一函数的分散重复调用不利于此函数的优化执行,致使效率低下。
例如,需要执行计算的电子数据表中,包括M个函数A,函数A需要调用其他数据表中的数据或者其他信息系统的数据完成计算。则现有技术将该电子数据表中的所有公式统筹安排排序后顺次执行,上述M个函数A分散存在于得到的公式序列中。因此,在现有技术的执行过程中,函数A就独立的、重复执行了M次,而每次执行函数A都需要独立的从其他数据表中查询、匹配获取相应数据,然后完成计算,无法实现对函数A的优化执行,浪费系统计算资源,计算速率较低。

发明内容
本发明所要解决的技术问题是提供一种电子数据表及单元格的函数收集方法和装置,可以大大提高电子数据表的整体计算速度,并适用于各种复杂的表格计算。
为了解决上述问题,本发明公开了一种电子数据表单元格公式的函数收集方法,包括确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则存储该函数及其参数至存储单元中;批量执行所收集的批量函数,得到相应的执行结果。
进一步,还可以包括根据得到的各批量函数的执行结果,完成单元格的计算。其中,可以通过将单元格公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
根据本发明的一个实施例,公开了一种电子数据表单元格的函数收集方法,包括
a、确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;b、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤c;c、在预置的存储单元中查询该函数及其参数;如果所述存储单元中存在该函数及其参数的结果,则返回该结果值;否则,将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;所述存储单元用于存储已收集的函数及其参数,以及相应的执行结果;d、批量执行所收集的批量函数,得到相应的执行结果,并存储至所述存储单元中;e、针对具有未定值的函数,重复执行步骤c和d,直到该单元格公式中没有具有未定值的函数。
进一步,还可以包括根据得到的各批量函数的执行结果,完成单元格的计算。其中,通过将包含函数的单元格公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
优选的,在步骤c中所述存储函数及其参数之前进一步包括判断所述存储单元中是否已经存在相同的函数及其参数,如果是,则跳过该函数。
优选的,在步骤d中所述批量执行的函数为未存储有对应结果的批量函数。
优选的,在步骤e中所述针对具有未定值的函数,重复执行步骤c和步骤d的过程为将全部的具有未定值的函数重复执行一次后再开始下一循环。
优选的,所述的步骤e为针对具有未定值的函数,重复执行步骤b、c和d,直到该单元格公式中没有具有未定值的函数。
根据另一实施例,还公开了一种电子数据表的函数收集方法,包括a、确定电子数据表中各单元格公式的计算顺序;b、确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;c、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤d;
d、在预置的存储单元中查询该函数及其参数;如果所述存储单元中存在该函数及其参数的结果,则返回该结果值;否则,将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;所述存储单元用于存储已收集的函数及其参数,以及相应的执行结果;e、针对下一单元格,重复执行步骤c和d,直到所需要计算的单元格公式都执行完毕;f、批量执行所收集的批量函数,得到相应的执行结果,并存储至所述存储单元中;g、针对具有未定值的单元格公式,重复执行步骤d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
进一步,还可以包括根据得到的各批量函数的执行结果,完成电子数据表的计算。
优选的,所述的步骤g为针对具有未定值的单元格公式,重复执行步骤c、d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
其中,可以通过将包含函数的单元格公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
优选的,所述的步骤e为针对下一单元格,重复执行步骤b、c和d,直到所需要计算的单元格公式都执行完毕。
优选的,在步骤d中存储函数及其参数之前进一步包括判断所述存储单元中是否已经存在相同的函数及其参数,如果是,则跳过该函数。
优选的,在步骤f中所述批量执行的函数为未存储有计算结果的批量函数。
本发明还提供了另一种电子数据表单元格的函数收集装置实施例,包括确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则存储该函数及其参数至存储单元中;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数以及执行单元返回的对应执行结果。
进一步,还可以包括单元格计算单元,用于根据得到的各批量函数的执行结果,完成单元格的计算。
本发明还公开了另一种电子数据表单元格的函数收集装置实施例,包括确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中查询该函数及其参数;存储判断单元,用于判断在存储单元中所查询的函数及其参数是否存储于存储单元中,如果所述存储单元中存在该函数及其参数的计算结果,则返回该结果值;如果没有该函数及其参数,则将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数以及执行单元返回的对应执行结果;未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
进一步,还可以包括单元格计算单元,用于根据得到的各批量函数的执行结果,完成单元格的计算。
进一步,还可以包括函数判断单元,用于判断在存储函数及参数之前,所述存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。
其中,所述执行单元批量执行的函数为所述存储单元中未存储有对应结果的批量函数。优选的,所述未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
本发明还公开了另一种电子数据表单元格的函数收集装置实施例,包括排列单元,用于排列电子数据表中各单元格公式的计算顺序;确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中查询该函数及其参数;存储判断单元,用于判断在存储单元中所查询的函数及其参数是否存储于存储单元中,如果所述存储单元中存在该函数及其参数的计算结果,则返回该结果值;如果没有该函数及其参数,则将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;单元格判断单元,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用运算单元和存储判断单元;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数以及执行单元返回的对应执行结果;未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
进一步,还可以包括电子数据表计算单元,用于根据得到的各批量函数的执行结果,完成电子数据表的计算。
优选的,所述的未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用运算单元、存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
优选的,单元格判断单元,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用确定单元、运算单元和存储判断单元。
进一步,还可以包括函数判断单元,用于判断在存储函数及参数之前,所述存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。
与现有技术相比,本发明提出了一种电子数据表及单元格的函数收集方法和装置,尤其适用于所述函数需要调用其他数据库或者数据表获取数据的情况,通过确定单元公式中调用函数的顺序,以及确定其中的批量函数和非批量函数,当存在非批量函数时,直接计算得到该非批量函数的结果,而对批量函数,则将该批量函数存储起来进行批量优化执行,不用分散重复调用,从而大大提高了电子数据表格及单元格的计算速度。
进一步,将该批量优化执行的结果返回存储单元与函数及其参数对应存储起来,当下次该函数调用时可以直接返回结果值,从而不再需要进行远程调用,大大节约系统资源,提高计算速度。在实际应用中,虽然每次收集参数及以参数集合进行函数执行的过程要比现有的每个函数单独执行的过程要费时,但是从整体而言,尤其在电子数据表中函数重复度较高的情况下,可以使整个电子数据表的整体计算速度提升大约10倍左右。


图1示出了一种电子数据表函数批量计算方法的步骤流程图;图2a示出了一种电子数据表单元格的函数收集方法的步骤流程图;图2b示出了一种解析后获得的语法树的示意图;图3示出了另一种电子数据表单元格的函数收集方法的步骤流程图;图4示出了一种电子数据表的函数收集方法的步骤流程图;图5示出了一种电子数据表单元格的函数收集装置的结构框图;图6示出了另一种电子数据表单元格的函数收集装置的结构框图;图7示出了一种电子数据表的函数收集装置的结构框图。
具体实施例方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。
本发明可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本发明所述的电子数据表的计算方法可以用于计算整张电子数据表的计算,也可以用于完成对其部分区域的计算。
参照图1,示出了一种电子数据表函数批量计算的方法的步骤流程图,包括以下步骤步骤101、扫描电子数据表中的单元格公式,从中收集符合预置条件的函数及其参数。
所述函数可以为实际应用中的任一函数,但是最佳的情况,所述函数需要调用外部数据源以完成函数执行,例如,所述函数需要调用外部数据库或者数据表以完成函数执行,或者所述函数需要调用互联网信息以完成函数执行等等。
本发明所述的函数批量计算可以由用户的人工请求触发,或者,由来自调用例程的请求自动地触发。所述扫描可以扫描该电子数据表中的所有单元格公式,当然对于存在限制条件的情况下,扫描该电子数据表中一部分的单元格公式也是可行的,本发明对此并不需要加以限定。
所述单元格公式可以仅仅包括一个本发明所述的符合预置条件的函数,也可以由多个函数组成,其中包括本发明所述的符合预置条件的函数。
步骤101中所述的收集符合预置条件的函数及其参数的过程可以采用直接字符串匹配的方法收集函数及其参数,也可以采用边解析边收集的方法,以满足单元格公式中的嵌套函数的需要。函数嵌套是指一个函数的参数为另一个函数的返回值,如果存在嵌套函数的情况时,需要首先将内部的函数调用完成后才能继续外部函数的调用。
步骤102、将所述函数及其参数批量提交给至少一个执行单元。
本发明所述的符合预置条件的函数可以为所述电子数据表中的全部函数,即批量收集所有的函数,将其中能够应用本发明的函数批量提交给至少一个执行单元。
所述批量接收函数的执行单元可以为一个或者多个,本领域技术人员根据需要执行的函数确定即可。例如,所述收集的电子数据表中的函数中可以分为不同的几类函数,则可以分别提交给不同的执行单元分别完成函数的批量优化执行,执行完成后,统一返回执行结果即可。
所述批量提交可以为一次提交,也可以为分批提交。例如,对于批量较大,执行单元无法一批处理的情况就可以分批提交给执行单元进行多批处理。
本发明所述的符合预置条件的函数也可以为某些特定函数,事先通过函数名称确定需要收集哪些函数即可。例如,对于电子数据表中的纯数值计算函数而言,应用本发明的技术效果并不明显,所以在批量收集的过程中可以忽略这些纯数值计算函数。
步骤103、执行单元针对批量收集的函数及其参数进行优化执行。
其中的优化执行所采用的方案根据不同的函数,可以有所不同,在此本发明无法一一论述。但是本发明对于技术的核心贡献在于函数及参数批量收集的方式,从根本上改变了电子数据表中函数执行的过程,使得针对该函数的优化执行成为可能。对于单独一个函数的执行也可以采用一定的优化执行方案,而对于函数的批量执行而言,不仅可以采用原有的优化执行方案,还可以采用更高级的组合排序等优化执行策略,以进一步提高函数的执行效率。
优选的,当所述函数为查询其他数据库或者数据表以获取相应数据时,则所述优化执行可以包括以所述参数的数据集合作为执行参数,查询相应的数据库或者数据表,完成函数执行。
进一步,对于整张电子数据表而言,上述步骤仅仅完成了部分单元格的计算,甚至仅仅完成了单元格公式的一部分的计算,所以,图1所示的方法还可以包括步骤104所述执行单元批量返回所述函数的执行结果;根据所述执行结果,完成整张所述电子数据表的计算。
所述执行单元可以向所述电子数据表批量返回执行结果,由包含在所述电子数据表中的执行单元对其他需要运算的部分进行计算。所述执行单元也可以向独立于所述电子数据表之外的另一个或多个执行单元批量返回执行结果。
针对本发明所述电子数据表的计算方法,下面通过几个实施例进行说明。
实施例1以Java语言为电子数据表编写外部二次开发模块,用于提供ACCT查询函数查询ERP(Enterprise Resource Planning,企业资源管理)数据库中的数据,ACCT定义为public BigDecimal ACCT(String科目代码)。在电子数据表单元格中即可输入公式“=ACCT(″001″)”查询ERP系统中ID为001的科目代码,例如,该代码对应的是现金金额,即查询ERP系统获取相应的现金金额数据。
在ACCT的内部实现中,通过拼装如下SQL_1语句完成对数据库的查询select金额from科目余额表while科目代码=″001″。在一次ACCT查询函数执行中需要执行以下一系列操作连接数据库、根据函数参数拼装SQL语句、执行SQL语句、关闭数据库连接等等。
假设本实施例中,在一个电子数据表中存在100个单元格,这100个单元格中分别填入为ACCT函数的单元公式查询科目代码001至100,例如,“=ACCT(″001″)”、“=ACCT(″002″)”、......“=ACCT(″100″)”。现有技术则将上述单元公式进行排序后,顺次重复调用上述100个ACCT函数,所耗用的时间近似等于一次ACCT(″001″)调用的100倍。
如果采用本发明进行函数批量计算,则需要考虑对100个ACCT函数的优化执行,因为本发明可以批量收集这100个ACCT函数的所有参数,所以优化执行的方式之一可以为连接数据库、根据函数参数拼装SQL语句、执行SQL语句、重复操作2和3直至完成所有的函数执行、关闭数据库连接。上述优化执行的过程就可以减少连接数据库和关闭数据库连接的多次操作,从而达到提高效率的目的。
为了实现能够在一次执行中就可以完成100个ACCT函数的执行,则首先要求二次开发模块提供批量查询函数用于接受批量查询参数。例如,在二次开发模块设置了ACCTALL函数,定义如下public BigDecimal[]ACCTALL(String[]科目代码),可以接受批量科目代码。
本发明首先对电子数据表内所有单元格内的公式进行扫描,收集所有的ACCT函数及其参数,一次性的批量提交给二次开发模块中的执行单元。该执行单元以包含参数″001″至″100″的数据集合为执行参数调用ACCTALL函数,一次获取100个查询结果数据。在ACCTALL函数的实现中,可通过拼装一条SQL_2语句完成100个数据的查询Select金额from科目余额表while科目代码in(″001″,″002″,...,″100″)。
假设执行一次ACCTALL耗时10倍于ACCT,相对于100次ACCT顺序调用,则从整体上看,本发明仍可以将电子数据表的整体计算速度提升10倍左右。在实际应用中,经过测算,本发明使ERP系统中电子数据表的整体计算速度有近10倍的提升。
实施例2假设在实施例1中的电子数据表的100个单元格中的单元公式并不仅仅包括ACCT函数,还包括对该函数或者其他参数进行计算的规则。
对于上述情况。本发明可以采用以下两种方式进行计算A、在二次开发模块中设置一个复杂的执行单元,用于执行包括ACCT函数的单元公式。
该方案优选适用于上述100个单元格中的单元公式都是相同的或者相近的情况,批量收集步骤时将整个单元公式收集上来,提交给该复杂的执行单元,批量完成后,返回执行结果给电子数据表。
B、在二次开发模块中设置的仍然是仅仅针对ACCT的执行单元,执行完成之后,向电子数据表返回执行结果,由预置在电子数据表中的其他执行单元完成各个单元格中的单元公式的计算。
该方案优选适用于上述100个单元格中的单元公式不尽相同,难以采用一个通用的执行单元完成,或者该电子数据表已自带相应的执行单元的情况,采用本发明批量执行的方式将执行结果返回电子数据表,其余的计算工作仍然由该电子数据表完成即可。
实施例3在基于上述实施例的基础上,对于收集到的函数及其参数,还可以充分利用多线程技术并行计算收集到的各类型函数。对于计算环境中有多CPU或者函数执行需要远程数据访问的计算场景而言,能够帮助计算机资源充分利用,计算效率明显提升。
下面通过一个具体的例子对步骤101中采用直接匹配法收集函数并完成计算的过程进行说明直接匹配法的核心思想就是通过字符串匹配的方法收集函数及其参数。譬如利用Excel完成针对针对某ERP系统的报表在Excel单元格中输入公式=SUM(ACCT(“001”),100),SUM函数是Excel所能识别的,ACCT函数是用来从ERP系统中提取数据的扩展函数,Excel系统不能识别。这时候可以应用直接匹配法1、扫描所有单元公式字符串,对于单元公式中的“函数(参数)”子字符串形式尝试识别为已知的扩展函数及其参数(通知事先预置即可获得),如果识别成功则收集此函数;2、对收集到的函数进行批量计算;3、再次扫描所有单元公式,将单元公式中先前收集到的“函数(参数)”子字符串替换为结果值。譬如=SUM(ACCT(“001”),100)将被替换为=SUM(99,100);4、启动Excel进行重算,此时单元公式已经全部是Excel可以识别的了,可以顺利完成整个电子数据表的计算。
通过这种直接匹配法虽然能够完成一些函数及其参数的收集,但由于它是对函数(参数)直接进行字符串的匹配,所以它并不能很好的解决批量函数嵌套时如何收集的问题,如对=ACCT(ACCT(“001”)这种函数就不能收集成功。虽然能够匹配到合适的函数,但是无法确定其参数;同时无法将函数的收集过程与电子数据表的计算过程更好的结合起来,以进一步提高电子数据表的整体运算速度。
所以本发明对此提出了更为优选的实施例,以解决上述问题。该实施例解决问题的核心在于首先确定单元格公式中函数的调用顺序,在调用单元格公式中的函数时,在预先设置的存储单元中查询该函数及其参数,如果有该函数及其参数的结果则直接返回该结果值,并继续执行;否则,存储单元存储该函数及其参数,返回一个未定值,并继续执行;将存储单元存储的函数及其参数交由执行单元执行,并将该返回的执行结果与函数及其参数对应存储在存储单元中;重复上述步骤,当该单元公式中没有未定值时,表明所有函数都收集完毕,退出函数收集过程。从而解决了嵌套函数的收集问题,并且能够为函数的批量执行提供基础,从而可以提高整个电子表格的运算速度。
例如,计算过程可以采用如下过程Do{For(计算链循环){计算每个单元格(计算完成或未完成(新收集了批量函数))}If(有新收集到的函数)批量查询}while(有新收集到的函数)参照图2a,示出了一种电子数据表单元格的函数收集方法的步骤流程图,包括以下步骤步骤201、确定调用顺序以及其中的批量函数和非批量函数。
确定当前单元格公式中各函数的调用顺序,确定单元格公式中函数顺序的方法有多种,例如,下述两种方式都是可行的a、将单元公式解析为语法树,执行语法树时各函数的调用次序就是确定的;b、采用早期Basic语言逐词解释、递归调用执行的方式也可以确定函数的调用次序。
本发明优先采用的是将包含函数的当前单元格公式解析成语法树的方式,从而确定其中的各个函数的调用顺序。
解析成语法树的方法在计算机编译过程中经常用到。传统的计算机语言的编译过程大概如下读入文本源代码→词法语法解析→抽象语法树→语义分析→代码生成。
对于本发明将当前单元格中的计算公式解析成语法树的过程,可以采用与上述基本相同的原理。
具体而言,当前单元格中的任何计算公式都可看成是一定字符集(称为字母表)上的一字符串(有限序列)。
例如,如果当前单元格中的计算公式为0.5*X1+C,则该字符串通常被看成是常数0.5、标识符X1和C,以及算符“*”和“+”所组成的一个表达式。其中常数“0.5”,标识符“X1”和“C”,算符“*”和“+”可以称为语言的单词符号,而表达式“0.5*X1+C”称为语言的一个语法范畴,或语法单位。
在解析所需的文法中规定了相应的词法规则和语法规则,通过针对单元格公式按照词法和语法规则进行解析,就可以将整个单元格公式解析成为语法树,从而确定调用顺序。其中,词法规则是指单词符号的形成规则,规定了字母表中什么样的字符串为一个单词符,即单元格公式中的单词符号是由词法规则所确定的;而语法规则是指语法单位的形成规则,即语法规则规定了如何从单词符号形成更大的结构(即语法单位)。
本领域技术人员可以根据实际需要选用合适的解析文法(例如,上下文无关文法)、词法规则和语法规则;当然,也可以自己设定专用的词法规则或语法规则,甚至可以设定专用的解析文法。本发明对此并不需要加以限定,根据不同的单元格公式进行相应的改进即可。
譬如对于单元公式=10+SUM(1,ACCT(”001”)),参照图2b,是其解析为语法树后的形式;以数组数据结构存储形式为(10,1,”001”,ACCT,SUM,+)。从数组存储形式的语法树可以看到函数的执行顺序,ACCT是先执行的,ACCT函数执行完成后其返回值和”1”作为SUM的参数继续执行,SUM的返回值与”10”相加,整个公式计算完成。
批量函数和非批量函数的确定方式有很多种,函数名称标识、配置文件、注册等等方式,对于本发明来说并不关键,在此就不加以详述了。
从语法树执行效率方面考虑,可以将是否为批量函数的标签直接标识在语法树的函数节点上,这在解析公式的时候一并完成就可以了。
所述的批量函数是可以批量收集和批量执行的函数,如ACCT(“001”)、ACCT(“002”),因为批量函数可以批量收集,批量优化执行,可以提高计算速度。
步骤202、如果该函数为非批量函数,则直接计算得到该函数的结果。
步骤203、如果该函数为批量函数,则把该函数及其参数存储在存储单元中。
进一步,如果该函数及其参数已经存储于存储单元中,则说明该函数及其参数不是第一次收集,已经被收集过了,则不再需要再次重复进行存储。
步骤204、执行存储的批量函数,并得到批量函数的结果。
其中的优化执行所采用的方案根据不同的函数,可以有所不同,在此本发明无法一一论述。但是本发明对于技术的核心贡献在于函数及参数批量收集的方式,从根本上改变了电子数据表中函数执行的过程,使得针对该函数的优化执行成为可能。对于单独一个函数的执行也可以采用一定的优化执行方案,而对于函数的批量执行而言,不仅可以采用原有的优化执行方案,还可以采用更高级的组合排序等优化执行策略,以进一步提高函数的执行效率。
优选的,当所述函数为查询其他数据库或者数据表以获取相应数据时,则所述优化执行可以包括以所述参数的数据集合作为执行参数,查询相应的数据库或者数据表,完成函数执行。
至此,单元格公式中的函数收集已经完成,本领域技术人员可以应用收集结果进行统计、分析等等操作,当然,也可以用于完成当前单元格的计算,例如,优选的,本实施例还可以包括步骤205、根据得到的各批量函数的执行结果完成当前单元格的计算。
对于非批量函数的计算结果可以采用缓存的方式,然后与批量函数的执行结果一起完成当前单元格的计算。例如,顺序执行该单元格公式,碰到批量函数,则查询获得相应的执行结果,碰到非批量函数,也查询获得相应的计算结果,从而完成整个单元格的计算。
当然,如果相比较而言,计算非批量函数的资源消耗比缓存方式的资源消耗更小,则也可以采用重复计算的方式实现。例如,顺序执行该单元格公式,碰到批量函数,则查询获得相应的执行结果,碰到非批量函数,则计算其结果,从而完成整个单元格的计算。
参照图3,示出了另一种电子数据表的当前单元格的函数收集方法的步骤流程图,它与图2a所示方法的区别在于,该方法通过对前述方法中的部分步骤进行重复,从而可以更好的解决嵌套函数的收集问题,具体可以包括以下步骤
步骤301、确定调用顺序及其中的批量函数和非批量函数。
确定当前单元格公式中各函数的调用顺序,确定单元格公式中函数顺序的方法有多种,本发明优先采用的是将当前单元格中的计算公式解析成语法树的方式,从而确定其中的各个函数的调用顺序。
步骤302、如果该函数为非批量函数,则直接计算得到该函数的结果。
步骤303、如果该函数为批量函数,则到存储单元中去查询。
步骤304、如果存储单元中有该函数及其参数的计算结果,则直接返回该结果值,从而节省一次函数的调用过程。
步骤305、如果没有该函数及其参数,则说明该函数及其参数是第一次调用,则将该函数及其参数存储入存储单元,完成函数及参数的收集,并针对该函数返回一个预定义的未定值,单元公式的剩余部分继续执行。这样,对有嵌套函数的单元公式已收集了最里层的函数。所述的未定值用来表明该函数及包含该函数的单元格公式没有完成计算,包含未定值的函数其结果仍然是未定值,包含未定值函数的单元格公式结果也为未定值,当然,也可以采用其他的标记来进行说明。
进一步,当该存储单元中存在该函数及其参数,但没有与之对应的结果值时,则说明该函数及其参数已经被收集了,此时则跳过函数的收集。
步骤306、存储单元将第一遍收集的函数及其参数交给执行单元批量执行,执行单元执行完毕后将该执行结果返回给存储单元,存储单元将执行结果与函数及其参数对应存储起来。从而下次查询该函数及其参数时,可以直接返回该函数及其参数的执行值。
然后重复步骤303、304、305、306,对具有未定值的函数进行函数的收集及计算,通过该重复步骤解决嵌套函数的收集,当再收集不到新的函数时,则整体计算完成。进一步,所述重复步骤优选的是将全部具有未定值的函数重复执行一次后再开始下一循环。
进一步,另一种情况,对返回未定值的函数及公式来说,在某些情况下,例如,批量函数的执行结果作为非批量函数的参数时,则就需要对该非批量函数进行计算,即需要重复步骤302、303、304、305、306,一直重复上述步骤,直至该单元格公式中没有具有未定值的函数,从而说明收集结束。
至此,单元格公式中的函数收集已经完成,本领域技术人员可以应用收集结果进行统计、分析等等操作,当然,也可以用于完成当前单元格的计算,例如,优选的,本实施例还可以包括步骤307,根据得到的各批量函数的执行结果,完成单元格的计算。
上面对图3所示的实施例进行了介绍,其中,与图2所示实施例相同或者相似的地方可以参见前述相关部分。
下面以一个例子来具体说明该方法流程。
实施例4单元公式为A=sum(100,200)+ACCT(“001”)+ACCT(ACCT(“001”))在该单元公式中,函数sum(100,200)为非批量函数,ACCT(“001”)为批量函数,ACCT(ACCT(“001”))为嵌套函数。首先确定名函数的调用顺序,则得到sum(100,200)、ACCT(“001”)为第一顺序,ACCT()为第二顺序。直接计算非批量函数sum(100,200)得到结果300,在存储单元中查询函数ACCT()及其参数001,假设存储单元中没有该函数及其参数,则为第一次收集,把函数ACCT()及其参数001存储入存储单元并返回一个未定值,具有未定值的函数则说明还要再次进行收集和运算。
嵌套函数ACCT(ACCT(“001”))中包含有函数及其参数ACCT(“001”),由于ACCT(“001”)在存储单元中已收集,则跳过,不再收集该函数,并返回一个未定值。
把第一次收集的函数及其参数交给执行单元执行,在该实施例中只收集到ACCT(“001”),执行后得到结果100,把该执行结果返回存储单元并与函数及其参数对应存储起来。
重复步骤303、304、305、306,再次查询ACCT(“001”),由于存储单元中已存在与之对应的执行结果100,则直接返回该结果,并收集ACCT(“100”),然后执行得到888。这样该单元公式中所有的函数都收集完毕,并有执行结果,结合执行结果和计算结果得到该单元格公式的结果,完成当前单元格的计算。
参照图4,示出了一种电子数据表的函数收集方法的步骤流程图,它与图3所示方法的区别在于,该方法是针对整个电子数据表的,该电子数据表可以包括很多的单元格公式,所述的电子数据表的计算方法可以用于计算整张电子数据表的计算,也可以用于完成对其部分区域的计算。图4所示的实施例具体可以包括以下步骤步骤401、确定电子数据表中各单元公式的计算顺序。
对于如何确定电子数据表中各单元公式的计算顺序,本领域技术人员可以采用各种可行的方法,主要的核心思想是被依赖者先完成计算,如C1=A1+B1,单元格C1依赖单元格A1和B1,则计算顺序为A1->B1->C1,保证计算C1之前A1和B1已完成计算。例如,在申请号为200510089360.4的专利公开文件中公开了一种排列单元公式的方法,在此不再予以详述。
步骤402、确定调用顺序及其中的批量函数和非批量函数。
确定单元格公式中各函数的调用顺序,确定单元格公式中函数顺序的方法有多种,本发明优先采用的是将当前单元格中的计算公式解析成语法树的方式,从而确定其中的各个函数的调用顺序。这和图2a、图3所示的方法中的步骤基本相似,在此不再详述。
步骤403、如果该函数为非批量函数,则直接计算得到该函数的结果。
步骤404、如果该函数为批量函数,则到存储单元中去查询。
步骤405、如果存储单元中有该函数及其参数的计算结果,则直接返回该结果值,从而节省一次函数的调用过程。
步骤406、如果没有该函数及其参数,则说明该函数及其参数是第一次调用,则将该函数及其参数存储入存储单元,完成函数及参数的收集,并针对该函数返回一个预定义的未定值,单元公式的剩余部分继续执行。这样,对有嵌套函数的单元公式已收集了最里层的函数。
为了便于判断,可以假设把步骤301中的确定单元公式的计算顺序放到一个链表结构中去,结果值不是未定值的节点因为不需要再次重算,可以从该链表中删除掉。
进一步,当该存储单元中存在该函数及其参数,但没有与之对应的结果值时,则说明该函数及其参数已经被收集了,此时则跳过函数的收集。
这样就完成了电子数据表格中第一个单元格公式函数的计算、收集,然后判断是否还有下一个单元格,如果有,则重复步骤402、403、404、405、406,对下一个单元格公式进行第一次计算、收集。当电子数据表格中所有单元格公式都完成第一次收集后,进入步骤407。
当然,也可以在步骤402中就对该电子数据表中的所有待计算单元格公式进行函数顺序确定(例如,统一完成语法树的解析过程并缓存结果),则上述重复循环的步骤可以仅仅重复403、404、405、406,对下一个单元格公式进行一次计算、收集。
步骤407、存储单元将第一遍收集的函数及其参数交给执行单元批量执行,执行单元执行完毕后将该执行结果返回给存储单元,存储单元将执行结果与函数及其参数对应存储起来,从而下次查询该函数及其参数时,可以直接返回该函数及其参数的执行值。
然后重复步骤404、405、406、407,再次对具有未定值的单元格公式进行函数的收集及计算。当电子数据表中不存在具有未定值的单元格公式时,则收集结束。
进一步,另一种情况,对具有未定值的单元格公式来说,如果没有缓存语法树,则需要重新确定函数的调用顺序和重新确定批量函数及非批量函数,这时就需要重复步骤402、403、404、405、406、407,一直重复上述步骤,直至电子数据表中不存在具有未定值的单元格公式,则说明收集结束,不需要再次重复。
收集完成后,优选的,该实施例还可以包括步骤408、根据各单元公式中非批量函数的计算结果和批量函数的执行结果完成整个电子数据表的计算。
对于有N层嵌套的函数来说,需要收集N+1次才能把单元公式的函数全部收集完毕,当收集了N+1次后,单元公式中没有未定值,从而单元公式中函数的收集完成,这样计算队列中所有的未定值都被删除掉。共要进行N+2遍计算才能完成电子数据表的整体计算。
下面还是以一个例子来具体说明该方法流程。
实施例5假设电子数据表A1=sum(100,200),B1=ACCT(“001”),C1=ACCT(ACCT(“002”)),
D1=ACCT(“002”)。
其中,A1=sum(100,200)为非批量函数;B1=ACCT(“001”)为批量函数;C1=ACCT(ACCT(“002”))为嵌套函数;D1=ACCT(“002”)为批量函数。
计算队列为{A1,B1,C1,D1},按照上述循环执行。
第一遍A1为非批量函数,直接执行完毕,A1值为300。将A1从计算队列中摘除;B1为批量函数,收集ACCT函数及其参数“001”,B1值为未定值;收集C1内层中的ACCT函数及其参数“002”,C1值为未定值;D1为批量函数,ACCT函数及其参数“002”已被C1收集过,D1值为未定值;本轮收集批量函数2个,分别为ACCT(“001”)、ACCT(“002”),将这两个函数提交给执行单元执行,批量执行ACCT(“001”)=“100”,ACCT(“002”)=“200”,执行完毕后,返回该执行结果给存储单元,函数收集单元将函数及其参数ACCT(“001”)、ACCT(“002”)以及与其对应的结果100、200存储,以便下次函数调用时利用。
第二遍本次步骤的重复执行仅仅针对具有未定值的单元格公式有B1、C1和D1即可。
B1包含的批量函数ACCT函数及其参数“001”已有查询结果“100”,执行完毕,B1值为“100”,将B1从计算队列中摘除;C1包含的批量函数ACCT函数及其参数“002”已有查询结果“200”,收集外层函数ACCT及参数“200”,转化为公式C1=ACCT(“200”),C1值为未定值;D1包含的批量函数ACCT函数及其参数“002”已有查询结果“200”,执行完毕,D1值为“200”,将D1从计算队列中摘除;本轮收集批量函数1个,为ACCT(“200”),将这两个函数提交给执行单元执行,批量执行ACCT(“200”)=“888”,执行完毕后,返回该执行结果给存储单元,函数收集单元将函数及其参数ACCT(“200”)以及与其对应的结果888存储。
第三遍本次步骤的重复执行中具有未定值的单元格公式只有C1了。
C1包含的批量函数ACCT函数及其参数“002”已有查询结果“200”,外层函数ACCT及参数“200”也有查询结果“888”,执行完毕,C1值为“100”,将C1从计算队列中摘除;本轮收集批量函数0个,退出循环,最后根据非批量函数的计算结果和批量函数的执行结果完成电子数据表整体计算。
参照图5,示出了一种电子数据表当前单元格的函数收集装置的结构框图,包括以下部件确定单元501,用于确定当前单元格公式中各函数的调用顺序,以及确定当前单元格公式各函数中的批量函数和非批量函数。确定单元格公式各函数调用顺序的方法有很多种,本发明优选采用将包含函数的单元公式解析成语法树的方式确定当前单元格公式中各函数的调用顺序,其原理及方法在前面的方法步骤中已论述过,在此不再详述。
运算单元502,用于根据所述调用顺序依次调用各函数,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则存储该函数及其参数至存储单元中。
执行单元503,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元。
存储单元504,用于存储批量函数及其参数以及执行单元返回的对应执行结果。
优选的,该收集装置还可以包括单元格计算单元505,用于根据得到的各非批量函数的计算结果和各批量函数的执行结果,完成当前单元格的计算。
参照图6,示出了另一种电子数据表当前单元格的函数收集装置的结构框图,它与图4所示装置的区别在于,该方法通过对前述方法中的部分步骤进行重复,从而可以更好的解决嵌套函数的收集问题,包括以下部件确定单元601,用于确定当前单元格公式中各函数的调用顺序,以及确定当前单元格公式各函数中的批量函数和非批量函数。本发明优选采用将包含函数的单元格公式解析成语法树的方式来确定各函数的调用顺序。
运算单元602,用于根据所述调用顺序依次调用各函数,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中查询该函数及其参数;存储判断单元603,用于判断在存储单元中查询的函数及其参数是否存储于存储单元中,如果所述存储单元中存在该函数及其参数的计算结果,则返回该结果值;如果没有该函数及其参数,则将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值。
进一步,还包括一个函数判断单元,用于判断在存储函数及参数前在存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。存储单元中有该函数及其参数,则说明了该函数及其参数不是第一次被收集,已经被收集过了,不需要再重复的收集,从而能够提高效率。
执行单元604,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元。因为存储单元中存储有函数及其参数,这些函数及其参数有的已经被执行,有了对应存储的执行结果,有的还没有进行执行,虽然执行单元可以对存储于存储单元中的所有函数及其参数都执行一次,但毫无疑问,这样会浪费大量的计算机资源,所以优选的是只执行存储单元中没有被执行过的函数及其参数。
存储单元605,用于存储批量函数及其参数以及执行单元返回的对应执行结果;未定值判断单元606,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元和执行单元,一直重复调用上述单元,直至该单元格公式中没有具有未定值的函数,则说明收集结束,不需要再次调用。
进一步,另一种情况,未定值判断单元可以重复调用运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
或者,另一种实施情况,未定值判断单元还可以重复调用确定单元、运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
优选的,该收集装置还可以包括单元格计算单元607,用于根据得到各批量函数的执行结果,完成当前单元格的计算。
参照图7,示出了一种电子数据表的函数收集装置的结构框图,包括以下部件排列单元701,用于排列电子数据表中各单元格公式的计算顺序。其核心思想是被依赖者先完成计算,如C1=A1+B1,单元格公式C1依赖单元格公式A1和B1,则计算顺序为A1->B1->C1,保证计算C1之前A1和B1已完成计算。
在申请号为200510089360.4的专利公开文件中公开了一种排列单元公式的方法,在此不再予以详述。
确定单元702,用于确定当前单元格公式中各函数的调用顺序;以及确定当前单元格公式各函数中的批量函数和非批量函数;运算单元703,用于根据所述调用顺序依次调用各函数,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中查询该函数及其参数;存储判断单元704,用于判断在存储单元中查询的函数及其参数是否存储于存储单元中,如果所述存储单元中存在该函数及其参数的计算结果,则返回该结果值;如果没有该函数及其参数,则将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;进一步,还包括一个函数判断单元,用于判断在存储函数及参数前在存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。存储单元中有该函数及其参数,则说明了该函数及其参数不是第一次被收集,已经被收集过了,不需要再重复的收集,从而能够提高效率。
存储单元705,用于存储批量函数及其参数以及执行单元返回的对应执行结果;单元格判断单元706,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用运算单元、存储判断单元和存储单元;或者,所述单元格判断单元还可以针对该单元格公式再次调用确定单元、运算单元、存储判断单元和存储单元;执行单元707,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元。因为存储单元中存储有函数及其参数,这些函数及其参数有的已经被执行,有了对应存储的执行结果,有的还没有进行执行,虽然执行单元可以对存储于存储单元中的所有函数及其参数都执行一次,但毫无疑问,这样会浪费大量的计算机资源,所以优选的是只执行存储单元中没有被执行过的函数及其参数。
未定值判断单元708,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元、单元格判断单元和执行单元,一直重复调用上述单元,直至该单元格公式中没有具有未定值的函数,则说明收集结束,不需要再次调用。
进一步,另一种情况,未定值判断单元可以重复调用运算单元、存储判断单元、单元格判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
或者,另一种实施情况,未定值判断单元还可以重复调用确定单元、运算单元、存储判断单元、单元格判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
优选的,该收集装置还可以包括电子数据表计算单元709,用于根据得到的各非批量函数的计算结果和各批量函数的执行结果,完成当前电子数据表的计算。
图5、6、7所示装置中未详述的部分可以参见图2、3、4所示方法的相关部分,为了篇幅考虑,在此不再详述。
以上对本发明所提供的一种电子数据表及单元格的函数收集方法和装置,进行了详细介绍说明,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种电子数据表单元格公式的函数收集方法,其特征在于,包括确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则存储该函数及其参数至存储单元中;批量执行所收集的批量函数,得到相应的执行结果。
2.根据权利要求1所述的函数收集方法,其特征在于,还包括根据得到的各批量函数的执行结果,完成单元格的计算。
3.根据权利要求1所述的函数收集方法,其特征在于通过将单元格公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
4.一种电子数据表单元格的函数收集方法,其特征在于,包括a、确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;b、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤c;c、在预置的存储单元中查询该函数及其参数;如果所述存储单元中存在该函数及其参数的结果,则返回该结果值;否则,将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;所述存储单元用于存储已收集的函数及其参数,以及相应的执行结果;d、批量执行所收集的批量函数,得到相应的执行结果,并存储至所述存储单元中;e、针对具有未定值的函数,重复执行步骤c和d,直到该单元格公式中没有具有未定值的函数。
5.根据权利要求4所述的函数收集方法,其特征在于,还包括根据得到的各批量函数的执行结果,完成单元格的计算。
6.根据权利要求4所述的函数收集方法,其特征在于通过将包含函数的单元格公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
7.根据权利要求4所述的函数收集方法,其特征在于,在步骤c中所述存储函数及其参数之前进一步包括判断所述存储单元中是否已经存在相同的函数及其参数,如果是,则跳过该函数。
8.根据权利要求4所述的函数收集方法,其特征在于,在步骤d中所述批量执行的函数为未存储有对应结果的批量函数。
9.根据权利要求4所述的函数收集方法,其特征在于,在步骤e中所述针对具有未定值的函数,重复执行步骤c和步骤d的过程为将全部的具有未定值的函数重复执行一次后再开始下一循环。
10.根据权利要求4所述的计算方法,其特征在于,所述的步骤e为针对具有未定值的函数,重复执行步骤b、c和d,直到该单元格公式中没有具有未定值的函数。
11.一种电子数据表的函数收集方法,其特征在于,包括a、确定电子数据表中各单元格公式的计算顺序;b、确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;c、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤d;d、在预置的存储单元中查询该函数及其参数;如果所述存储单元中存在该函数及其参数的结果,则返回该结果值;否则,将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;所述存储单元用于存储已收集的函数及其参数,以及相应的执行结果;e、针对下一单元格,重复执行步骤c和d,直到所需要计算的单元格公式都执行完毕;f、批量执行所收集的批量函数,得到相应的执行结果,并存储至所述存储单元中;g、针对具有未定值的单元格公式,重复执行步骤d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
12.根据权利要求11所述的函数收集方法,其特征在于,还包括根据得到的各批量函数的执行结果,完成电子数据表的计算。
13.根据权利要求11所述的函数收集方法,其特征在于,所述的步骤g为针对具有未定值的单元格公式,重复执行步骤c、d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
14.根据权利要求11所述的函数收集方法,其特征在于通过将包含函数的单元格公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
15.根据权利要求11所述的函数收集方法,其特征在于,所述的步骤e为针对下一单元格,重复执行步骤b、c和d,直到所需要计算的单元格公式都执行完毕。
16.根据权利要求11所述的函数收集方法,其特征在于,在步骤d中存储函数及其参数之前进一步包括判断所述存储单元中是否已经存在相同的函数及其参数,如果是,则跳过该函数。
17.根据权利要求11所述的函数收集方法,其特征在于,在步骤f中所述批量执行的函数为未存储有计算结果的批量函数。
18.一种电子数据表单元格的函数收集装置,其特征在于,包括确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则存储该函数及其参数至存储单元中;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数以及执行单元返回的对应执行结果。
19.根据权利要求18所述的函数收集装置,其特征在于,还包括单元格计算单元,用于根据得到的各批量函数的执行结果,完成单元格的计算。
20.根据权利要求18所述的函数收集装置,其特征在于通过将包含函数的单元公式解析成语法树的方式或者按照单元格公式解释执行的语意先后顺序确定单元格公式中各函数的调用顺序。
21.一种电子数据表单元格的函数收集装置,其特征在于,包括确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中查询该函数及其参数;存储判断单元,用于判断在存储单元中所查询的函数及其参数是否存储于存储单元中,如果所述存储单元中存在该函数及其参数的计算结果,则返回该结果值;如果没有该函数及其参数,则将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数以及执行单元返回的对应执行结果;未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
22.根据权利要求21所述的函数收集装置,其特征在于,还包括单元格计算单元,用于根据得到的各批量函数的执行结果,完成单元格的计算。
23.根据权利要求21所述的函数收集装置,其特征在于,还包括函数判断单元,用于判断在存储函数及参数之前,所述存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。
24.根据权利要求21所述的函数收集装置,其特征在于所述执行单元批量执行的函数为所述存储单元中未存储有对应结果的批量函数。
25.根据权利要求21所述的函数收集装置,其特征在于所述未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
26.一种电子数据表的函数收集装置,其特征在于,包括排列单元,用于排列电子数据表中各单元格公式的计算顺序;确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中查询该函数及其参数;存储判断单元,用于判断在存储单元中所查询的函数及其参数是否存储于存储单元中,如果所述存储单元中存在该函数及其参数的计算结果,则返回该结果值;如果没有该函数及其参数,则将该函数及其参数存储至所述存储单元中,并针对该函数返回一未定值;单元格判断单元,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用运算单元和存储判断单元;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数以及执行单元返回的对应执行结果;未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
27.根据权利要求26所述的函数收集装置,其特征在于,还包括电子数据表计算单元,用于根据得到的各批量函数的执行结果,完成电子数据表的计算。
28.根据权利要求26所述的函数收集装置,其特征在于所述的未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用运算单元、存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
29.根据权利要求26所述的函数收集装置,其特征在于单元格判断单元,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用确定单元、运算单元和存储判断单元。
30.根据权利要求26所述的函数收集装置,其特征在于,还包括函数判断单元,用于判断在存储函数及参数之前,所述存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。
全文摘要
本发明提供了一种电子数据表单元格公式的函数收集方法,包括确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则存储该函数及其参数至存储单元中;批量执行所收集的批量函数,得到相应的执行结果。尤其适用于所述函数需要调用其他数据库或者数据表获取数据的情况,通过确定单元公式中调用函数的顺序,以及确定其中的批量函数和非批量函数,当存在非批量函数时,直接计算得到该非批量函数的结果,而对批量函数,则将该批量函数存储起来进行批量优化执行,不用分散重复调用,从而大大提高了电子数据表格及单元格的计算速度。
文档编号G06F17/15GK101055566SQ20071010570
公开日2007年10月17日 申请日期2007年5月25日 优先权日2007年5月25日
发明者乔昕明 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1