CN100483397C - 一种电子数据表的函数收集方法和装置 - Google Patents

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

Info

Publication number
CN100483397C
CN100483397C CNB2007101057115A CN200710105711A CN100483397C CN 100483397 C CN100483397 C CN 100483397C CN B2007101057115 A CNB2007101057115 A CN B2007101057115A CN 200710105711 A CN200710105711 A CN 200710105711A CN 100483397 C CN100483397 C CN 100483397C
Authority
CN
China
Prior art keywords
function
parameter
eigenwert
storage unit
value
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.)
Active
Application number
CNB2007101057115A
Other languages
English (en)
Other versions
CN101055569A (zh
Inventor
乔昕明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kingdee Software China Co Ltd
Original Assignee
Kingdee Software China Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kingdee Software China Co Ltd filed Critical Kingdee Software China Co Ltd
Priority to CNB2007101057115A priority Critical patent/CN100483397C/zh
Publication of CN101055569A publication Critical patent/CN101055569A/zh
Application granted granted Critical
Publication of CN100483397C publication Critical patent/CN100483397C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供了一种电子数据表的函数收集方法,包括:将包含函数及其参数的单元格公式解析成语法树,确定单元格公式中各函数的调用顺序;以及,在解析过程中,紧随函数节点设置一特征值节点;根据所述调用顺序依次执行运算,收集符合预置条件的函数及其参数;所述收集过程包括依据特征值查询是否存储有相应执行结果的步骤;将所收集的函数及其参数批量提交,完成批量执行;存储执行结果与对应的函数及其参数和特征值。本发明将大量相同的批量函数的特征值都统一为一个特征值,经过第一遍查询后,每一组函数及其参数都确定了唯一的特征值,后续的查询完全依靠此特征值即可,函数收集效率的提高更为明显。

Description

一种电子数据表的函数收集方法和装置
技术领域
本发明涉及计算机数据处理领域,特别是涉及一种电子数据表的函数收集方法和装置。
背景技术
电子数据表(Spreadsheet):是以表格形式来组织数据及信息的计算工具软件,譬如Microsoft Excel,Lotus1-2-3,Borland Quattro Pro,LinuxGnumeric,WPS表格,永中Office等等。
单元格为电子数据表的最基本组成单元,其中可以包含计算公式,用以计算此单元格的数值。电子数据表还可以预先设定或由二次开发者提供一些功能函数,这些函数可用于单元公式中,以方便用户使用。
譬如SUM(number1,number2,...)函数,一般用于数据合计;AVERAGE(number1,number2,...)函数一般用于返回参数的平均值(算术平均值);电子数据表还可以预先设定更为复杂的函数,例如:在Microsoft Excel中的DDB(cost,salvage,life,period,factor)函数;而二次开发者提供的功能函数一般更为复杂,譬如ERP电子数据表系统中的ACCT函数用于从其它信息系统中提取财务数据。
总之,电子数据表中单元格能够使用的公式或者函数非常多,但是传统的电子表格程序如Microsoft Excel是利用单个计算链处理电子表格中公式的计算和重算,该计算链在本质上是被输入到Excel当前载入的所有工作表中的全部公式的有序列表。即现有技术中的电子数据表统筹安排其中各单元格的单元公式的计算顺序,以解释或编译执行的方式顺次执行计算单元公式,位于各个单元公式中的函数也被顺次调用,从而依次完成整张电子数据表的数据处理。
但是在实际应用中,发现上述处理过程在复杂的财务数据处理过程中,存在以下的技术问题:都需要对整张电子数据表中的同一函数进行重复调用,而同一函数的分散重复调用不利于此函数的优化执行,致使效率低下。
例如,需要执行计算的电子数据表中,包括M个函数A,函数A需要调用其他数据表中的数据或者其他信息系统的数据完成计算。则现有技术将该电子数据表中的所有公式统筹安排排序后顺次执行,上述M个函数A分散存在于得到的公式序列中。因此,在现有技术的执行过程中,函数A就独立的、重复执行了M次,而每次执行函数A都需要独立的从其他数据表中查询、匹配获取相应数据,然后完成计算,无法实现对函数A的优化执行,浪费系统计算资源,计算速率较低。
发明内容
本发明所要解决的技术问题是提供一种电子数据表及单元格的函数收集方法和装置,可以大大提高电子数据表中函数的收集效率。
为了解决上述问题,根据本发明的实施例,公开了一种电子数据表的函数收集方法,包括:将包含函数及其参数的单元格公式解析成语法树,确定单元格公式中各函数的调用顺序;以及,在解析过程中,紧随函数节点设置一特征值节点;根据所述调用顺序依次执行运算,收集符合预置条件的函数及其参数;所述收集过程包括依据特征值查询是否存储有相应执行结果的步骤;将所收集的函数及其参数批量提交,完成批量执行;存储执行结果与对应的函数及其参数和特征值。优选的,所述的存储步骤可以为:函数批量执行后,以特征值进行定位查询,将执行结果与函数及其参数和特征值对应存储。
根据本发明的实施例,还公开了一种电子数据表单元格的函数收集方法,其特征在于,包括:a、将包含函数及其参数的单元格公式解析成语法树,确定当前单元格公式中各函数的调用顺序以及确定批量函数和非批量函数;以及,在解析过程中,紧随函数节点设置一特征值节点;b、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤c;c、在预置的存储单元中以该函数及其参数的特征值查询,收集没有相应结果值的批量函数,并针对该函数返回一未定值;d、批量执行所存储的批量函数,得到对应的执行结果,并对应存储该结果值与函数及其参数和特征值至所述存储单元中;e、针对具有未定值的函数,重复执行步骤d和e,直到该单元格公式中没有具有未定值的函数。
优选的,所述的步骤c为:在预置的存储单元中以该函数及其参数的特征值查询,如果所述存储单元中存在与该特征值对应的结果,则返回该结果值,否则以该函数及其参数进行查询;如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值,如果存储单元中没有相同的函数及其参数,存储该函数及其参数以及对应的特征值至存储单元,并针对该函数返回一未定值,所述存储单元用于存储已收集的函数及其参数和对应的特征值,以及相应的执行结果。
根据本发明的实施例,还公开了一种电子数据表的函数收集方法,包括:a、确定电子数据表中各单元格公式的计算顺序;b、将包含函数及其参数的单元格公式解析成语法树,确定当前单元格公式中各函数的调用顺序以及确定批量函数和非批量函数;以及,在解析过程中,紧随函数节点设置一特征值节点;c、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤d;d、在预置的存储单元中以该函数及其参数的特征值查询,收集没有相应结果值的批量函数,并针对该函数返回一未定值;e、针对下一单元格,重复执行步骤c和d,直到所需要执行的单元格公式都执行完毕;f、批量执行所存储的批量函数,得到相应的执行结果,并将该结果值与函数及其参数和特征值对应存储至所述存储单元中;g、针对具有未定值的单元格公式,重复执行步骤d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
根据本发明的实施例,还公开了一种电子数据表的当前单元格的函数收集装置,包括:解析单元,用于将包含函数及其参数的单元格公式解析成语法树,并在解析后的语法树中的函数节点后添加一个特征值节点,作为此函数及其参数的特征值;确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中以该函数及其参数的特征值进行查询;存储判断单元,用于判断在存储单元中查询的特征值是否存在对应的结果,收集没有相应结果值的批量函数,并针对该函数返回一未定值;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数和特征值以及执行单元返回的对应执行结果;未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
根据本发明的实施例,还公开了一种电子数据表的函数收集装置,包括:排列单元,用于排列电子数据表中各单元格公式的计算顺序;解析单元,用于将包含函数及其参数的单元格公式解析成语法树,并在解析后的语法树中的函数节点后添加一个特征值节点,作为此函数及其参数的特征值;确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中以该函数及其参数的特征值进行查询;存储判断单元,用于判断在存储单元中查询的特征值是否存在对应的结果,收集没有相应结果值的批量函数,并针对该函数返回一未定值;单元格判断单元,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用运算单元和存储判断单元;执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;存储单元,用于存储批量函数及其参数和特征值以及执行单元返回的对应执行结果;未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
与现有技术相比,本发明具有以下优点:
本发明提出了一种电子数据表及单元格的函数收集方法和装置,尤其适用于所述函数需要调用其他数据库或者数据表获取数据的情况,通过确定单元公式中调用函数的顺序,以及确定其中的批量函数和非批量函数,当存在非批量函数时,直接计算得到该非批量函数的结果,而对批量函数,则将该批量函数存储起来进行批量优化执行,不用分散重复调用,从而大大提高了电子数据表格及单元格的计算速度。
进一步,将该批量优化执行的结果返回存储单元与函数及其参数对应存储起来,当下次该函数调用时可以直接返回结果值,从而不再需要进行远程调用,大大节约系统资源,提高计算速度。
进一步,本发明为单元格公式的函数及其参数定义了一个对应的特征值,将其作为一个节点存储在对应单元公式的语法树中重复利用,用该特征值来代表对应的函数及其参数进行查询操作,因此当需要在存储单元中对该函数及其参数为对象进行查询时,不再以函数及其参数本身为对象进行查询,代之以特征值进行查询,即以一个简单的特征值为对象代替多样的,复杂的函数及其参数进行查询,提高了查询函数的效率,特别是函数及其参数需要进行远程查询、多次查询时,函数查询效率的提高更为明显,从而大大提高了函数收集的效率。
当单元格公式中存在大量相同的批量函数时,本发明进一步将这些函数的特征值都统一为一个特征值,经过第一遍查询后,每一组函数及其参数都确定了唯一的特征值,相同的函数及其参数的特征值相同,后续的查询完全依靠此特征值即可,函数收集效率的提高更为明显。
附图说明
图1是一种电子数据表函数批量计算的方法的步骤流程图;
图2a是一种电子数据表单元格的函数收集方法的步骤流程图;
图2b是一单元公式解析成语法树后的结构图;
图3是一种电子数据表的函数收集方法的步骤流程图;
图4a是本发明实施例一种电子数据表单元格的函数收集方法步骤流程图;
图4b是一单元公式解析成语法树并添加特征值后的结构图
图5是本发明实施例一种电子数据表的函数收集方法的步骤流程图;
图6是本发明实施例一种电子数据表单元格的函数收集装置的结构框图;
图7是本发明实施例一种电子数据表的函数收集装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
参照图1,示出了一种电子数据表函数批量计算的方法的步骤流程图,包括以下步骤:
步骤101、扫描电子数据表中的单元格公式,从中收集符合预置条件的函数及其参数。
所述函数可以为实际应用中的任一函数,但是最佳的情况,所述函数需要调用外部数据源以完成函数执行。
所述的函数批量计算可以由用户的人工请求触发,或者,由来自调用例程的请求自动地触发。所述扫描可以扫描该电子数据表中的所有单元格公式,当然对于存在限制条件的情况下,扫描该电子数据表中一部分的单元格公式也是可行的,本发明对此并不需要加以限定。
所述单元格公式可以仅仅包括一个本发明所述的符合预置条件的函数,也可以由多个函数组成,其中包括本发明所述的符合预置条件的函数。
步骤101中所述的收集符合预置条件的函数及其参数的过程可以采用直接字符串匹配的方法收集函数及其参数,也可以采用边解析边收集的方法,以满足单元格公式中的嵌套函数的需要。函数嵌套是指一个函数的参数为另一个函数的返回值,如果存在嵌套函数的情况时,需要首先将内部的函数调用完成后才能继续外部函数的调用。
步骤102、将所述函数及其参数批量提交给至少一个执行单元。
所述的符合预置条件的函数可以为所述电子数据表中的全部函数,即批量收集所有的函数,将其中能够应用本发明的函数批量提交给至少一个执行单元。
所述批量接收函数的执行单元可以为一个或者多个,本领域技术人员根据需要执行的函数确定即可。
所述批量提交可以为一次提交,也可以为分批提交。例如,对于批量较大,执行单元无法一批处理的情况就可以分批提交给执行单元进行多批处理。
所述的符合预置条件的函数也可以为某些特定函数,事先通过函数名称确定需要收集哪些函数即可。
步骤103、执行单元针对批量收集的函数及其参数进行优化执行。
其中的优化执行所采用的方案根据不同的函数,可以有所不同,在此本发明无法一一论述。但是本发明对于技术的核心贡献在于:函数及参数批量收集的方式,从根本上改变了电子数据表中函数执行的过程,使得针对该函数的优化执行成为可能。对于单独一个函数的执行也可以采用一定的优化执行方案,而对于函数的批量执行而言,不仅可以采用原有的优化执行方案,还可以采用更高级的组合排序等优化执行策略,以进一步提高函数的执行效率。
优选的,当所述函数为查询其他数据库或者数据表以获取相应数据时,则所述优化执行可以包括:以所述参数的数据集合作为执行参数,查询相应的数据库或者数据表,完成函数执行。
进一步,对于整张电子数据表而言,上述步骤仅仅完成了部分单元格的计算,甚至仅仅完成了单元格公式的一部分的计算,所以,图1所示的方法还可以包括步骤104:所述执行单元批量返回所述函数的执行结果;根据所述执行结果,完成整张所述电子数据表的计算。
所述执行单元可以向所述电子数据表批量返回执行结果,由包含在所述电子数据表中的执行单元对其他需要运算的部分进行计算。所述执行单元也可以向独立于所述电子数据表之外的另一个或多个执行单元批量返回执行结果。
下面对步骤101中采用直接匹配法收集函数并完成计算的过程进行说明:
直接匹配法的核心思想就是通过字符串匹配的方法收集函数及其参数。譬如利用Excel完成针对针对某ERP系统的报表:在Excel单元格中输入公式=SUM(ACCT(“001”),100),SUM函数是Excel所能识别的,ACCT函数是用来从ERP系统中提取数据的扩展函数,Excel系统不能识别。这时候可以应用直接匹配法。
通过这种直接匹配法虽然能够完成一些函数及其参数的收集,但由于它是对函数(参数)直接进行字符串的匹配,所以它并不能很好的解决批量函数嵌套时如何收集的问题,如对=ACCT(ACCT(“001”)这种函数就不能收集成功。虽然能够匹配到合适的函数,但是无法确定其参数;同时无法将函数的收集过程与电子数据表的计算过程更好的结合起来,以进一步提高电子数据表的整体运算速度。
所以对此提出了更为优选的实施例,以解决上述问题。该实施例解决问题的核心在于:首先确定单元格公式中函数的调用顺序,在调用单元格公式中的函数时,在预先设置的存储单元中查询该函数及其参数,如果有该函数及其参数的结果则直接返回该结果值,并继续执行;否则,存储单元存储该函数及其参数,返回一个未定值,并继续执行;将存储单元存储的函数及其参数交由执行单元执行,并将该返回的执行结果与函数及其参数对应存储在存储单元中;重复上述步骤,当该单元公式中没有未定值时,表明所有函数都收集完毕,退出函数收集过程。从而解决了嵌套函数的收集问题,并且能够为函数的批量执行提供基础,从而可以提高整个电子数据表格的运算速度。
参照图2a,示出了一种电子数据表单元格的函数收集方法的步骤流程图,包括以下步骤:
步骤201、确定调用顺序以及其中的批量函数和非批量函数。
确定当前单元格公式中各函数的调用顺序,确定单元格公式中函数顺序的方法有多种,例如,下述两种方式都是可行的:a、将单元公式解析为语法树,执行语法树时各函数的调用次序就是确定的;b、采用早期Basic语言逐词解释、递归调用执行的方式也可以确定函数的调用次序。
本发明优先采用的是将包含函数的当前单元格公式解析成语法树的方式,从而确定其中的各个函数的调用顺序。
解析成语法树的方法在计算机编译过程中经常用到。传统的计算机语言的编译过程大概如下:读入文本源代码→词法语法解析→抽象语法树→语义分析→代码生成。
对于本发明将当前单元格中的计算公式解析成语法树的过程,可以采用与上述基本相同的原理。
譬如对于单元公式=10+SUM(1,ACCT(”001”)),参照图2a,是其解析为语法树后的形式;以数组数据结构存储形式为:(10,1,”001”,ACCT,SUM,+)。从数组存储形式的语法树可以看到函数的执行顺序,ACCT是先执行的,ACCT函数执行完成后其返回值和”1”作为SUM的参数继续执行,SUM的返回值与”10”相加,整个公式计算完成。
批量函数和非批量函数的确定方式有很多种,函数名称标识、配置文件、注册等等方式,对于本发明来说并不关键,在此就不加以详述了。
从语法树执行效率方面考虑,可以将是否为批量函数的标签直接标识在语法树的函数节点上,这在解析公式的时候一并完成就可以了。
所述的批量函数是可以批量收集和批量执行的函数,如ACCT(“001”)、ACCT(“002”),因为批量函数可以批量收集,批量优化执行,可以提高计算速度。
步骤202、如果该函数为非批量函数,则直接计算得到该函数的结果。该步骤的优点之一在于,满足一些情况下,批量函数的参数是非批量函数的情况。
步骤203、如果该函数为批量函数,则到存储单元中去查询。
步骤204、如果存储单元中有该函数及其参数的计算结果,则直接返回该结果值,从而节省一次函数的调用过程。
步骤205、如果没有该函数及其参数,则说明该函数及其参数是第一次调用,则将该函数及其参数存储入存储单元,完成函数及参数的收集,并针对该函数返回一个预定义的未定值,单元公式的剩余部分继续执行。这样,对有嵌套函数的单元公式已收集了最里层的函数。所述的未定值用来表明该函数及包含该函数的单元格公式没有完成计算,包含未定值的函数其结果仍然是未定值,包含未定值函数的单元格公式结果也为未定值,当然,也可以采用其他的标记来进行说明。
进一步,当该存储单元中存在该函数及其参数,但没有与之对应的结果值时,则说明该函数及其参数已经被收集了,此时则跳过函数的收集。
步骤206、存储单元将第一遍收集的函数及其参数交给执行单元批量执行,执行单元执行完毕后将该执行结果返回给存储单元,存储单元将执行结果与函数及其参数对应存储起来。从而下次查询该函数及其参数时,可以直接返回该函数及其参数的执行值。
然后重复步骤203、204、205、206,对具有未定值的函数进行函数的收集及计算,通过该重复步骤解决嵌套函数的收集,当再收集不到新的函数时,则整体计算完成。进一步,所述重复步骤优选的是将全部具有未定值的函数重复执行一次后再开始下一循环。
进一步,另一种情况,对返回未定值的函数及公式来说,在某些情况下,例如,批量函数的执行结果作为非批量函数的参数时,则就需要对该非批量函数进行计算,即需要重复步骤202、203、204、205、206,一直重复上述步骤,直至该单元格公式中没有具有未定值的函数,从而说明收集结束。
至此,单元格公式中的函数收集已经完成,本领域技术人员可以应用收集结果进行统计、分析等等操作,当然,也可以用于完成当前单元格的计算,例如,优选的,本实施例还可以包括:
步骤207、根据得到的各批量函数的执行结果完成当前单元格的计算。
对于非批量函数的计算结果可以采用缓存的方式,然后与批量函数的执行结果一起完成当前单元格的计算。例如,顺序执行该单元格公式,碰到批量函数,则查询获得相应的执行结果,碰到非批量函数,也查询获得相应的计算结果,从而完成整个单元格的计算。
当然,如果相比较而言,计算非批量函数的资源消耗比缓存方式的资源消耗更小,则也可以采用重复计算的方式实现。例如,顺序执行该单元格公式,碰到批量函数,则查询获得相应的执行结果,碰到非批量函数,则计算其结果,从而完成整个单元格的计算。
参照图3,示出了一种电子数据表的函数收集方法的步骤流程图,它与图2所示方法的区别在于,该方法是针对整个电子数据表的,该电子数据表可以包括很多的单元格公式,所述的电子数据表的计算方法可以用于计算整张电子数据表的计算,也可以用于完成对其部分区域的计算。图3所示实施例具体可以包括以下步骤:
步骤301、确定电子数据表中各单元公式的计算顺序。
对于如何确定电子数据表中各单元公式的计算顺序,本领域技术人员可以采用各种可行的方法,主要的核心思想是被依赖者先完成计算,如C1=A1+B1,单元格C1依赖单元格A1和B1,则计算顺序为A1->B1->C1,保证计算C1之前A1和B1已完成计算。例如,在申请号为200510089360.4的专利公开文件中公开了一种排列单元公式的方法,在此不再予以详述。
步骤302、确定调用顺序及其中的批量函数和非批量函数。步骤303、如果该函数为非批量函数,则直接计算得到该函数的结果。步骤304、如果该函数为批量函数,则到存储单元中去查询。步骤305、如果存储单元中有该函数及其参数的计算结果,则直接返回该结果值。步骤306、如果没有该函数及其参数,则将该函数及其参数存储入存储单元,并针对该函数返回一个预定义的未定值,单元公式的剩余部分继续执行。这样,对有嵌套函数的单元公式已收集了最里层的函数。与图2所示的方法中的步骤基本相似,为了篇幅考虑,在此不再详述。
这样就完成了电子数据表格中第一个单元格公式函数的计算、收集,然后判断是否还有下一个单元格,如果有,则重复步骤302、303、304、305、306,对下一个单元格公式进行第一次计算、收集。当电子数据表格中所有单元格公式都完成第一次收集后,进入步骤307。
当然,也可以在步骤302中就对该电子数据表中的所有待计算单元格公式进行函数顺序确定(例如,统一完成语法树的解析过程并缓存结果),则上述重复循环的步骤可以仅仅重复303、304、305、306,对下一个单元格公式进行一次计算、收集。
步骤307、存储单元将第一遍收集的函数及其参数交给执行单元批量执行,执行单元执行完毕后将该执行结果返回给存储单元,存储单元将执行结果与函数及其参数对应存储起来,从而下次查询该函数及其参数时,可以直接返回该函数及其参数的执行值。
然后重复步骤304、305、306、307,再次对具有未定值的单元格公式进行函数的收集及计算。当电子数据表中不存在具有未定值的单元格公式时,则收集结束。
进一步,另一种情况,对具有未定值的单元格公式来说,如果没有缓存语法树,则需要重新确定函数的调用顺序和重新确定批量函数及非批量函数,这时就需要重复步骤302、303、304、305、306、307,一直重复上述步骤,直至电子数据表中不存在具有未定值的单元格公式,则说明收集结束,不需要再次重复。
收集完成后,优选的,该实施例还可以包括:
步骤308、根据各单元公式中非批量函数的计算结果和批量函数的执行结果完成整个电子数据表的计算。
对于有N层嵌套的函数来说,需要收集N+1次才能把单元公式的函数全部收集完毕,当收集了N+1次后,单元公式中没有未定值,从而单元公式中函数的收集完成,这样计算队列中所有的未定值都被删除掉。共要进行N+2遍计算才能完成电子数据表的整体计算。
下面还是以一个实例来具体说明该方法流程。
假设电子数据表:
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个,退出循环,最后根据非批量函数的计算结果和批量函数的执行结果完成电子数据表整体计算。
虽然上述几个实施例所提供的函数收集方法解决了嵌套函数的收集问题,并且能够为函数的批量执行提供基础,提高了整个电子数据表格中函数的收集效率。但因为该函数收集的方法要以函数及其参数为对象在存储单元中查询。通常这样的查询会发生三次。即:第一次、在首次执行包含指定函数的单元公式时,以函数及其参数为对象在存储单元中查询是否已收集此函数及其参数;第二次、函数及其参数收集完成后,将存储单元中的所有函数及其参数打包为一个数据包传给执行单元进行执行,函数执行完成后数据包中包含对应每个函数及其参数的计算结果。将该数据包中的结果导入存储单元时需要再次以该函数及其参数为对象进行查询定位,从而使该执行结果与函数及其参数一一对应存储;第三次、一次批量函数执行完成后,对刚才收集过函数,未完成单元公式计算的单元节点再次计算,需要再次以该函数及其参数为对象去存储单元中查询结果值。
因为函数及其参数的多样性,以函数及其参数为对象进行查询是个耗时的操作,对同一组函数及其参数,进行了3次完全相同的耗时操作,影响了函数收集的效率,并有计算机资源的不必要浪费。
所以本发明对此提出了更为优选的实施例,减少以函数及其参数为对象进行查询,以解决上述问题。该实施例解决问题的核心在于:为单元格公式的函数及其参数定义了一个对应的特征值,将其作为一个节点存储在对应单元公式的语法树中重复利用,用该特征值代表对应的函数及其参数进行查询操作,因此当需要在存储单元中对该函数及其参数为对象进行查询时,不再以函数及其参数本身为对象进行查询,代之以特征值进行查询,即以一个简单的特征值为对象代替多样的,复杂的函数及其参数进行查询,提高了查询函数的效率,特别是函数及其参数需要进行远程查询、多次查询时,函数查询效率的提高更为明显,从而大大提高了函数收集的效率。
当单元格公式中存在大量相同的批量函数时,本发明进一步将这些函数的特征值都统一为一个特征值,经过第一遍查询后,每一组函数及其参数都确定了唯一的特征值,相同的函数及其参数的特征值相同,后续的查询完全依靠此特征值即可,函数收集效率的提高更为明显。
参照图4a,示出了本发明另一种电子数据表单元格的函数收集方法的步骤流程图,包括以下步骤:
步骤401、将包含函数及其参数的单元格公式解析成语法树,并在语法树中增加一个特征值节点。
解析成语法树的方法在计算机编译过程中经常用到。传统的计算机语言的编译过程大概如下:读入文本源代码→词法语法解析→抽象语法树→语义分析→代码生成。
对于本发明将当前单元格中的计算公式解析成语法树的过程,可以采用与上述基本相同的原理。至于具体的解析过程,在图8所示的实施例中已经详细描述过了,在此不再予以详述。
该函数及其参数分别作为此语法树的节点,并紧随该函数节点添加一个特征值节点,作为对应此函数及其参数的特征值,从而在以后的查询步骤中,不再以复杂多样的函数及其参数为对象进行查询操作,而以对应该函数及其参数的特征值进行查询操作,特征值通常比对应的函数及其参数简单的多,所以可以提高查询的效率,节约计算机资源。
譬如对于单元公式=10+SUM(1,ACCT(“001”)),参照图4b,是其解析为语法树后并对函数及其参数ACCT(“001”)添加整数特征值节点b1(其值为“10”)的形式。
所述语法树还可以用来确定当前单元格公式中各函数的调用顺序。当然,本领域的技术人员知道还可以采用其他的方法来确定公式中各函数的调用顺序,如采用早期Basic语言逐词解释、递归调用执行的方式来确定函数的调用次序。本发明优选的是采用解析后的语法树来确定公式中各函数的调用顺序,这样可以重复利用解析后的语法树,提高函数收集的效率。
所述语法树也可以用来确定当前单元格公式的批量函数和非批量函数,显而易见,本领域的技术人员也可以采用其他的方式来确定单元格公式中的批量函数和非批量函数。如采用函数名称标识、配置文件、注册等方式,都可以对单元格公式中的批量函数和非批量函数进行识别,对于本发明来说并不关键,在此就不加以详述了,本发明优选采用解析后的语法树来确定单元格公式中的批量函数和非批量函数,同样是因为可以重复利用解析后的语法树,提高函数收集的效率。
优选的,所述特征值采用一个递增的整数值,采用递增整数作为特征值是为了保证特征值的唯一性。极端的情况,如果此整数在大量的解析过程中递增趋向整数最大值时则可回头从整数最小值开始,显而易见,正常的电子数据表中是不会出现整数极限个函数的,所以可以保证此整数特征值的唯一性。当然也可以采用其他的方式达到特征值唯一性的目的,如采用当前的系统时间等作为特征值,但都不如整数增量特征值简单高效。本发明也不对此加以限定。
因为在解析语法树的过程中很容易就能识别出单元格公式中的批量函数和非批量函数,非批量函数在本发明的优选实施例中并不需要进行查询操作,所以在本发明进一步优选的实施例中不需要对非批量函数定义特征值,即只在批量函数节点后添加一个特征值节点,这样可以节约整数特征值,节约了计算机系统资源。
步骤402、根据解析后的语法树确定的函数调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果,该步骤的优点之一在于,满足一些情况下,批量函数的参数是非批量函数的情况。
步骤403、如果是批量函数,则以该函数及其参数的特征值到存储单元中去查询。
步骤404、如果存储单元中存储有该特征值对应的结果值,则直接返回该结果值。这样就节省了一次函数的调用过程。特别的,该步骤不再以函数及其参数为对象进行查询操作,而是以一个简单的特征值进行查询操作,这在需要进行远程查询操作时效率提高极为明显。
步骤405、如果存储单元中没有存储与该特征值对应的结果值,则说明该函数及其参数和对应的特征值没有被收集过,则将该函数及其参数和对应的特征值存储入存储单元,完成该函数及其参数和特征值的收集。并针对该函数返回一个未定值。单元公式的剩余部分继续执行。这样,对有嵌套函数的单元公式已收集了最里层的函数。所述的未定值用来表明该函数及包含该函数的单元格公式没有完成计算,包含未定值的函数其结果仍然是未定值,包含未定值函数的单元格公式结果也为未定值,当然,也可以采用其他的标记来进行说明。所述未定值的作用在前面的实施例中已经详细描述过,在此也不再详述。
步骤406、存储单元将第一遍收集的函数及其参数交给执行单元批量执行,执行单元执行完毕后将该执行结果返回给存储单元,存储单元将执行结果与函数及其参数和特征值对应存储起来。从而下次查询该特征值时,可以直接返回该特征值的执行结果。
在该步骤中,当执行单元将函数执行完毕后返回执行结果给存储单元时,可以以函数及其参数为对象进行查询,从而将执行结果与函数及其参数对应存储起来,但本发明优选的是以该函数及其参数的特征值为对象进行查询,从而将执行结果与函数及其参数和特征值对应存储起来。如果执行单元和存储单元不在同一个系统中时,这样对查询效率的提高是非常明显的。
然后重复步骤403、404、405、406,对具有未定值的函数进行收集及计算,通过该重复步骤解决嵌套函数的收集,当再收集不到新的函数时,则整体计算完成。进一步,所述重复步骤优选的是将全部具有未定值的函数重复执行一次后再开始下一循环。
进一步,另一种情况,对返回未定值的函数及公式来说,在某些情况下,例如,批量函数的执行结果作为非批量函数的参数时,则就需要对该非批量函数进行计算,即需要重复步骤402、403、404、405、406,一直重复上述步骤,直至该单元格公式中没有具有未定值的函数,从而说明收集结束。
至此,单元格公式中的函数收集已经完成,本领域技术人员可以应用收集结果进行统计、分析等等操作,当然,也可以用于完成当前单元格的计算,例如,优选的,本实施例还可以包括:
步骤407、根据得到的各批量函数的执行结果完成当前单元格的计算。
对于非批量函数的计算结果可以采用缓存的方式,然后与批量函数的执行结果一起完成当前单元格的计算。例如,顺序执行该单元格公式,碰到批量函数,则查询获得相应的执行结果,碰到非批量函数,也查询获得相应的计算结果,从而完成整个单元格的计算。
当然,如果相比较而言,计算非批量函数的资源消耗比缓存方式的资源消耗更小,则也可以采用重复计算的方式实现。例如,顺序执行该单元格公式,碰到批量函数,则查询获得相应的执行结果,碰到非批量函数,则计算其结果,从而完成整个单元格的计算。
优选的,在步骤405中,如果存储单元中没有存储该特征值对应的结果值时,则以该函数及其参数进行查询,如果存储单元中存在相同的函数及其参数,则说明该函数及其参数已经被收集过了。以存储单元中已经存储的相同函数及其参数对应的特征值替换该查询函数及其参数在语法树中的特征值,通过该替换步骤后,相同函数及参数的特征值在语法树中就是相同的了。即相同函数及其参数对应的特征值节点是同一个。这种在语法树中对特征值进行替换是很简单就能实现的,如对特征值节点重新赋值即可。如果存储单元中没有该函数及其参数,则说明该函数及其参数是第一次收集,将该函数及其参数和对应的特征值存储入存储单元中。
经过第一遍收集后,每一组函数及其参数都确定了唯一特征值,相同的函数及其参数统一了特征值,后续的查询操作完全依靠此特征值即可,效率提升明显。
进一步,所述步骤406中的批量执行的对象是存储单元中未存储有对应结果的批量函数,因为存储单元中存储有对应执行结果的函数及其参数和特征值,这些函数是已经被执行过的,为了提高效率,节约计算机资源,已经执行过的函数就不再执行了,即只执行没有被执行过的函数。
参照图5,示出了一种电子数据表的函数收集方法的步骤流程图,它与图4所示方法的区别在于,该方法是针对整个电子数据表的,该电子数据表可以包括很多的单元格公式,所述的电子数据表的计算方法可以用于计算整张电子数据表的计算,也可以用于完成对其部分区域的计算。图4所示实施例具体可以包括以下步骤:
步骤501、确定电子数据表中各单元公式的计算顺序。
对于如何确定电子数据表中各单元公式的计算顺序,本领域技术人员可以采用各种可行的方法,主要的核心思想是被依赖者先完成计算,如C1=A1+B1,单元格C1依赖单元格A1和B1,则计算顺序为A1->B1->C1,保证计算C1之前A1和B1已完成计算。例如,在申请号为200510089360.4的专利公开文件中公开了一种排列单元公式的方法,在此不再予以详述。
步骤502、将包含函数及其参数的单元格公式解析成语法树,并在语法树中增加一个特征值节点。
该函数及其参数分别作为此语法树的节点,并紧随该函数节点添加一个特征值节点,作为对应此函数及其参数的特征值,从而在以后的查询步骤中,不再以复杂多样的函数及其参数为对象进行查询操作,而以对应该函数及其参数的特征值进行查询操作,特征值通常比对应的函数及其参数简单的多,所以可以提高查询的效率,节约计算机资源。
所述语法树还可以用来确定当前单元格公式中各函数的调用顺序。当然,本领域的技术人员知道还可以采用其他的方法来确定公式中各函数的调用顺序,如采用早期Basic语言逐词解释、递归调用执行的方式来确定函数的调用次序。本发明优选的是采用解析后的语法树来确定公式中各函数的调用顺序,这样可以重复利用解析后的语法树,提高函数收集的效率。
所述语法树也可以用来确定当前单元格公式的批量函数和非批量函数,显而易见,本领域的技术人员也可以采用其他的方式来确定单元格公式中的批量函数和非批量函数。如采用函数名称标识、配置文件、注册等方式,都可以对单元格公式中的批量函数和非批量函数进行识别,对于本发明来说并不关键,在此就不加以详述了,本发明优选采用解析后的语法树来确定单元格公式中的批量函数和非批量函数,同样是因为可以重复利用解析后的语法树,提高函数收集的效率。
优选的,所述特征值采用一个递增的整数值,采用递增整数作为特征值是为了保证特征值的唯一性。极端的情况,如果此整数在大量的解析过程中递增趋向整数最大值时则可回头从整数最小值开始,显而易见,正常的电子数据表中是不会出现整数极限个函数的,所以可以保证此整数特征值的唯一性。当然也可以采用其他的方式达到特征值唯一性的目的,如采用当前的系统时间等作为特征值,但都不如整数增量特征值简单高效。本发明也不对此加以限定。
因为在解析语法树的过程中很容易就能识别出单元格公式中的批量函数和非批量函数,非批量函数在本发明的优选实施例中并不需要进行查询操作,所以在本发明进一步优选的实施例中不需要对非批量函数定义特征值,即只在批量函数节点后添加一个特征值节点,这样可以节约整数特征值,节约了计算机系统资源。
步骤503、根据解析后的语法树确定的函数调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果,该步骤的优点之一在于,满足一些情况下,批量函数的参数是非批量函数的情况。
步骤504、如果是批量函数,则以该函数及其参数的特征值到存储单元中去查询。
步骤505、如果存储单元中存储有该特征值对应的结果值,则直接返回该结果值。这样就节省了一次函数的调用过程。特别的,该步骤不再以函数及其参数为对象进行查询操作,而是以一个简单的特征值进行查询操作,这在需要进行远程查询操作时效率提高极为明显。
步骤506、如果存储单元中没有存储该特征值对应的结果值时,则以该函数及其参数进行查询,如果存储单元中存在相同的函数及其参数,则说明该函数及其参数已经被收集过了。以存储单元中已经存储的相同函数及其参数对应的特征值替换该查询函数及其参数在语法树中的特征值,通过该替换步骤后,相同函数及参数的特征值在语法树中就是相同的了。即相同函数及其参数对应的特征值节点是同一个。这种在语法树中对特征值进行替换是很简单就能实现的,如对特征值节点重新赋值即可。
如果存储单元中没有该函数及其参数,则说明该函数及其参数是第一次收集,将该函数及其参数和对应的特征值存储入存储单元中。并针对该函数返回一个未定值。单元公式的剩余部分继续执行。这样,对有嵌套函数的单元公式已收集了最里层的函数。所述的未定值用来表明该函数及包含该函数的单元格公式没有完成计算,包含未定值的函数其结果仍然是未定值,包含未定值函数的单元格公式结果也为未定值,当然,也可以采用其他的标记来进行说明。所述未定值的作用在前面的实施例中已经详细描述过,在此也不再详述。
在另一实施例中,在预置的存储单元中以该函数及其参数的特征值查询,收集没有相应结果值的批量函数,并针对该函数返回一未定值。
经过第一遍收集后,每一组函数及其参数都确定了唯一特征值,相同的函数及其参数统一了特征值,后续的查询操作完全依靠此特征值即可,效率提升明显。
这样就完成了电子数据表格中第一个单元格公式函数的计算、收集,然后判断是否还有下一个单元格,如果有,则重复步骤502、503、504、505、506,对下一个单元格公式进行第一次计算、收集。当电子数据表格中所有单元格公式都完成第一次收集后,进入步骤507。
当然,也可以在步骤502中就对该电子数据表中的所有待计算单元格公式进行函数顺序确定(例如,统一完成语法树的解析过程并缓存结果),则上述重复循环的步骤可以仅仅重复503、504、505、506,对下一个单元格公式进行一次计算、收集。
步骤507、存储单元将第一遍收集的函数及其参数交给执行单元批量执行,执行单元执行完毕后将该执行结果返回给存储单元,存储单元将执行结果与函数及其参数和特征值对应存储起来,从而下次查询该特征时,可以直接返回该特征值的对应结果。
在该步骤中,当执行单元将函数执行完毕后返回执行结果给存储单元时,可以以函数及其参数为对象进行查询,从而将执行结果与函数及其参数对应存储起来,但本发明优选的是以该函数及其参数的特征值为对象进行查询,从而将执行结果与函数及其参数和特征值对应存储起来。如果执行单元和存储单元不在同一个系统中时,这样对查询效率的提高是非常明显的。
进一步,批量执行的对象是存储单元中未存储有对应结果的批量函数,因为存储单元中存储有对应执行结果的函数及其参数和特征值,这些函数是已经被执行过的,为了提高效率,节约计算机资源,已经执行过的函数就不再执行了,即只执行没有被执行过的函数。
然后重复步骤504、505、506、507,再次对具有未定值的单元格公式进行函数的收集及计算。当电子数据表中不存在具有未定值的单元格公式时,则收集结束。
进一步,另一种情况,对具有未定值的单元格公式来说,如果没有缓存语法树,则需要重新确定函数的调用顺序和重新确定批量函数及非批量函数,这时就需要重复步骤502、503、504、505、506、507,一直重复上述步骤,直至电子数据表中不存在具有未定值的单元格公式,则说明收集结束,不需要再次重复。
收集完成后,本领域技术人员可以应用收集结果进行统计、分析等等操作优选的,该实施例还可以包括:
步骤508、根据各单元公式中非批量函数的计算结果和批量函数的执行结果完成整个电子数据表的计算。
参照图6,示出了一种电子数据表单元格的函数收集装置的结构框图,包括以下部件:
解析单元601,用于将包含函数及其参数的单元格公式解析成语法树,并在语法树中增加一个特征值节点。
该函数及其参数分别作为此语法树的节点,并紧随该函数节点添加一个特征值节点,作为对应此函数及其参数的特征值,从而在以后的查询步骤中,不再以复杂多样的函数及其参数为对象进行查询操作,而以对应该函数及其参数的特征值进行查询操作,特征值通常比对应的函数及其参数简单的多,所以可以提高查询的效率,节约计算机资源。
所述解析单元还可以包括一个确定单元,利用解析单元解析后的所述语法树还可以用来确定当前单元格公式中各函数的调用顺序。当然,本领域的技术人员知道还可以采用其他的方法来确定公式中各函数的调用顺序,如采用早期Basic语言逐词解释、递归调用执行的方式来确定函数的调用次序,即解析单元和确定单元是独立的。本发明优选的是采用解析后的语法树来确定公式中各函数的调用顺序,这样可以重复利用解析后的语法树,提高函数收集的效率。
所述确定单元利用解析单元解析后的所述语法树来确定当前单元格公式的批量函数和非批量函数,显而易见,本领域的技术人员也可以采用其他的方式来确定单元格公式中的批量函数和非批量函数。如采用函数名称标识、配置文件、注册等方式,都可以对单元格公式中的批量函数和非批量函数进行识别,对于本发明来说并不关键,在此就不加以详述了,即解析单元和确定单元是独立的。本发明优选采用解析后的语法树来确定单元格公式中的批量函数和非批量函数,同样是因为可以重复利用解析后的语法树,提高函数收集的效率。
优选的,所述特征值采用一个递增的整数值,采用递增整数作为特征值是为了保证特征值的唯一性。极端的情况,如果此整数在大量的解析过程中递增趋向整数最大值时则可回头从整数最小值开始,显而易见,正常的电子数据表中是不会出现整数极限个函数的,所以可以保证此整数特征值的唯一性。当然也可以采用其他的方式达到特征值唯一性的目的,如采用当前的系统时间等作为特征值,但都不如整数增量特征值简单高效。本发明也不对此加以限定。
因为在解析语法树的过程中很容易就能识别出单元格公式中的批量函数和非批量函数,非批量函数在本发明的优选实施例中并不需要进行查询操作,所以在本发明进一步优选的实施例中不需要对非批量函数定义特征值,即只在批量函数节点后添加一个特征值节点,这样可以节约整数特征值,节约了计算机系统资源。
运算单元602,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中以该函数及其参数的特征值进行查询。
存储判断单元603,用于判断在存储单元中查询的特征值是否存在对应的结果,收集没有相应结果值的批量函数,并针对该函数返回一未定值。
在另一实施例中,所述存储判断单元用于判断在存储单元中查询的特征值是否存在对应的结果,存在则返回该结果值;如果不存在对应的结果,则以该函数及其参数进行查询,如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值;如果存储单元中没有相同的函数及其参数,则将该函数及其参数以及对应的特征值存储入存储单元中,并针对该函数返回一未定值。
进一步,还包括一个函数判断单元,用于判断在存储函数及参数前在存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。存储单元中有该函数及其参数,则说明了该函数及其参数不是第一次被收集,已经被收集过了,不需要再重复的收集,从而能够提高效率。
执行单元604,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元。因为存储单元中存储有函数及其参数,这些函数及其参数有的已经被执行,有了对应存储的执行结果,有的还没有进行执行,虽然执行单元可以对存储于存储单元中的所有函数及其参数都执行一次,但毫无疑问,这样会浪费大量的计算机资源,所以优选的是只执行存储单元中没有被执行过的函数及其参数。
存储单元605,用于存储批量函数及其参数和特征值以及执行单元返回的对应执行结果。
未定值判断单元606,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
进一步,另一种情况,未定值判断单元可以重复调用运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
或者,另一种实施情况,未定值判断单元还可以重复调用确定单元、运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
优选的,该收集装置还可以包括单元格计算单元607,用于根据得到各批量函数的执行结果,完成当前单元格的计算。
参照图7,示出了一种电子数据表的函数收集装置的结构框图,包括以下部件:
排列单元701,用于排列电子数据表中各单元格公式的计算顺序。其核心思想是被依赖者先完成计算,如C1=A1+B1,单元格公式C1依赖单元格公式A1和B1,则计算顺序为A1->B1->C1,保证计算C1之前A1和B1已完成计算。
在申请号为200510089360.4的专利公开文件中公开了一种排列单元公式的方法,在此不再予以详述。
解析单元702,用于将包含函数及其参数的单元格公式解析成语法树,确定当前单元格公式中各函数的调用顺序以及确定批量函数和非批量函数,并在解析后的语法树中的函数节点后添加一个特征值节点,作为此函数及其参数的特征值,同图6所示方法一样,本实施例所述解析单元还可以包括一个确定单元,所述确定单元也可以与解析单元分别独立,但本发明优选的是确定单元位于所述解析单元中。
运算单元703,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中以该函数及其参数的特征值进行查询。
存储判断单元704,用于判断在存储单元中查询的特征值是否存在对应的结果,收集没有相应结果值的批量函数,并针对该函数返回一未定值。
在另一实施例中,所述存储判断单元用于判断在存储单元中查询的特征值是否存在对应的结果,存在则返回该结果值;如果不存在对应的结果,则以该函数及其参数进行查询,如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值;如果存储单元中没有相同的函数及其参数,则将该函数及其参数以及对应的特征值存储入存储单元中,并针对该函数返回一未定值。
进一步,还包括一个函数判断单元,用于判断在存储函数及参数前在存储单元中是否已经存在相同的函数及参数,如果是,则跳过该函数。存储单元中有该函数及其参数,则说明了该函数及其参数不是第一次被收集,已经被收集过了,不需要再重复的收集,从而能够提高效率。
存储单元705,用于存储批量函数及其参数和特征值以及执行单元返回的对应执行结果。
单元格判断单元706,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用解析单元、运算单元和存储判断单元;
执行单元707,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元。因为存储单元中存储有函数及其参数,这些函数及其参数有的已经被执行,有了对应存储的执行结果,有的还没有进行执行,虽然执行单元可以对存储于存储单元中的所有函数及其参数都执行一次,但毫无疑问,这样会浪费大量的计算机资源,所以优选的是只执行存储单元中没有被执行过的函数及其参数。
未定值判断单元708,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
进一步,另一种情况,未定值判断单元可以重复调用运算单元、存储判断单元、单元格判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
或者,另一种实施情况,未定值判断单元还可以重复调用解析单元、运算单元、存储判断单元、单元格判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
优选的,该收集装置还可以包括电子数据表计算单元709,用于根据得到的各非批量函数的计算结果和各批量函数的执行结果,完成当前电子数据表的计算。
图6、7所示装置中未详述的部分可以参见图1、2、3、4、5所示方法的相关部分,为了篇幅考虑,在此不再详述。
以上对本发明所提供的一种电子数据表及单元格的函数收集方法和装置,进行了详细介绍说明,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (25)

1、一种电子数据表的函数收集方法,其特征在于,包括:
将包含函数及其参数的单元格公式解析成语法树,确定单元格公式中各函数的调用顺序;以及,在解析过程中,紧随函数节点设置一特征值节点;
根据所述调用顺序依次执行运算,收集符合预置条件的函数及其参数;所述收集过程包括依据特征值查询是否存储有相应执行结果的步骤;如果有该函数及其参数的结果则直接返回该结果,并继续执行;否则,存储该函数及其参数,返回一个未定值,并继续执行;
将所收集的函数及其参数批量提交,完成批量执行;
存储执行结果与对应的函数及其参数和特征值;
利用上述执行结果重新计算包含未定值的单元格,当电子表所有单元格公式中没有未定值时,表明所有函数都收集完毕。
2、如权利要求1所述的函数收集方法,其特征在于,所述存储执行结果与对应的函数及其参数和特征值为:
函数批量执行后,以特征值进行定位查询,将执行结果与函数及其参数和特征值对应存储。
3、如权利要求1所述的函数收集方法,其特征在于:
所述对应函数及其参数的特征值为一个递增的整数值。
4、如权利要求1所述的函数收集方法,其特征在于:
所述设置特征值节点的对应函数节点是批量函数节点。
5、一种电子数据表单元格的函数收集方法,其特征在于,包括:
a、将包含函数及其参数的单元格公式解析成语法树,确定当前单元格公式中各函数的调用顺序以及确定批量函数和非批量函数;以及,在解析过程中,紧随函数节点设置一特征值节点;
b、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤c;
c、在预置的存储单元中以该函数及其参数的特征值查询,如果有该函数及其参数的结果则直接返回该结果,并继续执行;如果没有相应结果值,收集该批量函数,并针对该函数返回一未定值;
d、批量执行所存储的批量函数,得到对应的执行结果,并对应存储该结果值与函数及其参数和特征值至所述存储单元中;
e、针对具有未定值的函数,重复执行步骤d和e,直到该单元格公式中没有具有未定值的函数。
6、如权利要求5所述的函数收集方法,其特征在于,所述的步骤c为:
在预置的存储单元中以该函数及其参数的特征值查询,如果所述存储单元中存在与该特征值对应的结果,则返回该结果值;否则将该函数及其参数以及对应的特征值存储入存储单元中,并针对该函数返回一未定值,所述存储单元用于存储已收集的函数及其参数和对应的特征值,以及对应的执行结果。
7、如权利要求5所述的函数收集方法,其特征在于,所述的步骤c为:
在预置的存储单元中以该函数及其参数的特征值查询,如果所述存储单元中存在与该特征值对应的结果,则返回该结果值,否则以该函数及其参数进行查询;如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值,如果存储单元中没有相同的函数及其参数,存储该函数及其参数以及对应的特征值至存储单元,并针对该函数返回一未定值,所述存储单元用于存储已收集的函数及其参数和对应的特征值,以及相应的执行结果。
8、如权利要求5、6或7所述的函数收集方法,其特征在于,步骤d中所述存储过程为:
函数批量执行后,以特征值在存储单元中进行定位查询,对应存储执行结果与函数及其参数和特征值至存储单元中。
9、如权利要求5所述的函数收集方法,其特征在于:
所述对应函数及其参数的特征值为一个递增的整数值。
10、如权利要求5所述的函数收集方法,其特征在于,在步骤e中所述针对具有未定值的函数,重复执行步骤c和步骤d的过程为:
将全部的具有未定值的函数重复执行一次后再开始下一循环。
11、如权利要求5所述的函数收集方法,其特征在于,所述的步骤e为:
针对具有未定值的函数,重复执行步骤b、c和d,直到该单元格公式中没有具有未定值的函数。
12、如权利要求5所述的函数收集方法,其特征在于,还包括:
根据得到的各批量函数的执行结果,完成单元格的计算。
13、如权利要求5所述的函数收集方法,其特征在于:
所述设置特征值节点的对应函数节点是批量函数节点。
14、一种电子数据表的函数收集方法,其特征在于,包括:
a、确定电子数据表中各单元格公式的计算顺序;
b、将包含函数及其参数的单元格公式解析成语法树,确定当前单元格公式中各函数的调用顺序以及确定批量函数和非批量函数;以及,在解析过程中,紧随函数节点设置一特征值节点;
c、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤d;
d、在预置的存储单元中以该函数及其参数的特征值查询,如果有该函数及其参数的结果则直接返回该结果,并继续执行;如果没有相应结果值,收集没有相应结果值的批量函数,并针对该函数返回一未定值;
e、针对下一单元格,重复执行步骤c和d,直到所需要执行的单元格公式都执行完毕;
f、批量执行所存储的批量函数,得到相应的执行结果,并将该结果值与函数及其参数和特征值对应存储至所述存储单元中;
g、针对具有未定值的单元格公式,重复执行步骤c、d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
15、如权利要求14所述的函数收集方法,其特征在于,所述的步骤d为:
在预置的存储单元中以该函数及其参数的特征值查询,如果所述存储单元中存在与该特征值对应的结果,则返回该结果值;否则将该函数及其参数以及对应的特征值存储入存储单元中,并针对该函数返回一未定值;所述存储单元用于存储已收集的函数及其参数和对应的特征值,以及对应的执行结果。
16、如权利要求14所述的函数收集方法,其特征在于,所述的步骤d为:
在预置的存储单元中以该函数及其参数的特征值查询,如果所述存储单元中存在与该特征值对应的结果,则返回该结果值;否则以该函数及其参数进行查询,如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值;如果存储单元中没有相同的函数及其参数,存储该函数及其参数以及对应的特征值至存储单元,并针对该函数返回一未定值;所述存储单元用于存储已收集的函数及其参数和对应的特征值,以及相应的执行结果。
17、如权利要求14所述的函数收集方法,其特征在于,步骤f中所述存储过程为:
函数批量执行后,以特征值在存储单元中查询,将执行结果与函数及其参数和特征值对应存储在存储单元中。
18、如权利要求14所述的函数收集方法,其特征在于:
所述对应函数及其参数的特征值为一个递增的整数值。
19、一种电子数据表的函数收集方法,其特征在于,包括:
a、确定电子数据表中各单元格公式的计算顺序;
b、将包含函数及其参数的单元格公式解析成语法树,确定当前单元格公式中各函数的调用顺序以及确定批量函数和非批量函数;以及,在解析过程中,紧随函数节点设置一特征值节点;
c、根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则执行步骤d;
d、在预置的存储单元中以该函数及其参数的特征值查询,如果有该函数及其参数的结果则直接返回该结果,并继续执行;如果没有相应结果值,收集没有相应结果值的批量函数,并针对该函数返回一未定值;
e、针对下一单元格,重复执行步骤c和d,直到所需要执行的单元格公式都执行完毕;
f、针对下一单元格公式,重复执行步骤b、c和d,直到所需要执行的单元格公式都执行完毕;
g、针对具有未定值的单元格公式,重复执行步骤c、d、e和f,直到该电子数据表中没有具有未定值的单元格公式。
20、一种电子数据表的当前单元格的函数收集装置,其特征在于,包括:
解析单元,用于将包含函数及其参数的单元格公式解析成语法树,并在解析后的语法树中的函数节点后添加一个特征值节点,作为此函数及其参数的特征值;
确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;
运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中以该函数及其参数的特征值进行查询;
存储判断单元,用于判断在存储单元中查询的特征值是否存在对应的结果,如果有该函数及其参数的结果则直接返回该结果,并继续执行;如果没有相应结果值,收集没有相应结果值的批量函数,并针对该函数返回一未定值;
执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;
存储单元,用于存储批量函数及其参数和特征值以及执行单元返回的对应执行结果;
未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
21、如权利要求20所述的函数收集装置,其特征在于,存储判断单元的所述判断收集过程为:
判断在存储单元中查询的特征值是否存在对应的结果,存在则返回该结果值,如果不存在对应的结果,则以该函数及其参数进行查询;如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值,如果存储单元中没有相同的函数及其参数,则将该函数及其参数以及对应的特征值存储入存储单元中,并针对该函数返回一未定值。
22、如权利要求20所述的函数收集装置,其特征在于:
所述未定值判断单元,用于判断是否还存在具有未定值的函数,如果存在,则再次调用运算单元、存储判断单元和执行单元,直至该单元格公式中没有具有未定值的函数。
23、一种电子数据表的函数收集装置,其特征在于,包括:
排列单元,用于排列电子数据表中各单元格公式的计算顺序;
解析单元,用于将包含函数及其参数的单元格公式解析成语法树,并在解析后的语法树中的函数节点后添加一个特征值节点,作为此函数及其参数的特征值;
确定单元,用于确定单元格公式中各函数的调用顺序,以及其中的批量函数和非批量函数;
运算单元,用于根据所述调用顺序依次执行运算,如果是非批量函数,则计算得到该函数的计算结果;如果是批量函数,则在预置的存储单元中以该函数及其参数的特征值进行查询;
存储判断单元,用于判断在存储单元中查询的特征值是否存在对应的结果,如果有该函数及其参数的结果则直接返回该结果,并继续执行;如果没有相应结果值,收集没有相应结果值的批量函数,并针对该函数返回一未定值;
单元格判断单元,用于判断是否还存在未被执行的单元格公式,如果存在,则针对该单元格公式再次调用解析单元、确定单元、运算单元和存储判断单元;
执行单元,用于批量执行存储单元所存储的批量函数,并返回执行结果给存储单元;
存储单元,用于存储批量函数及其参数和特征值以及执行单元返回的对应执行结果;
未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
24、如权利要求23所述的函数收集装置,其特征在于,存储判断单元的所述判断收集过程为:
判断在存储单元中查询的特征值是否存在对应的结果,存在则返回该结果值,如果不存在对应的结果,则以该函数及其参数进行查询;如果存储单元中存在相同的函数及其参数,则将该函数及其参数在语法树中的特征值替换成已存储的相同函数及其参数的特征值,如果存储单元中没有相同的函数及其参数,则将该函数及其参数以及对应的特征值存储入存储单元中,并针对该函数返回一未定值。
25、如权利要求23所述的函数收集装置,其特征在于:
所述的未定值判断单元,用于判断是否还存在具有未定值的单元格公式,如果存在,则再次调用运算单元、存储判断单元、单元格判断单元和执行单元,直至该电子数据表中没有具有未定值的单元格公式。
CNB2007101057115A 2007-05-25 2007-05-25 一种电子数据表的函数收集方法和装置 Active CN100483397C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2007101057115A CN100483397C (zh) 2007-05-25 2007-05-25 一种电子数据表的函数收集方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2007101057115A CN100483397C (zh) 2007-05-25 2007-05-25 一种电子数据表的函数收集方法和装置

Publications (2)

Publication Number Publication Date
CN101055569A CN101055569A (zh) 2007-10-17
CN100483397C true CN100483397C (zh) 2009-04-29

Family

ID=38795408

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101057115A Active CN100483397C (zh) 2007-05-25 2007-05-25 一种电子数据表的函数收集方法和装置

Country Status (1)

Country Link
CN (1) CN100483397C (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110314365A1 (en) * 2010-06-17 2011-12-22 Microsoft Corporation Decompiling loops in a spreadsheet
CN102622336A (zh) * 2012-02-28 2012-08-01 上海万得信息技术股份有限公司 一种基于互联网的Excel插件数据批量提取系统及方法
CN102981856B (zh) * 2012-11-28 2015-08-12 南开大学 基于网络的程序计算结果存储与检索方法及系统
CN103500157A (zh) * 2013-09-02 2014-01-08 用友软件股份有限公司 基于动态公式的表格填充装置和方法
EP3248117A4 (en) * 2015-02-12 2017-12-20 Huawei Technologies Co. Ltd. Method and query optimization server for associating functions with columns for optimizing query execution
CN104778043B (zh) * 2015-04-02 2017-11-10 浪潮集团有限公司 一种基于计算顺序处理前置的集团财务报表计算方法
CN108268437A (zh) * 2016-12-30 2018-07-10 航天信息股份有限公司 公式处理的方法及装置

Also Published As

Publication number Publication date
CN101055569A (zh) 2007-10-17

Similar Documents

Publication Publication Date Title
CN100483397C (zh) 一种电子数据表的函数收集方法和装置
CN101055566B (zh) 一种电子数据表的函数收集方法和装置
CN101021874B (zh) 一种对查询sql请求进行优化的方法及装置
EP3254191B1 (en) Apparatus and method for using parameterized intermediate representation for just-in-time compilation in database query execution engine
CN104620239A (zh) 自适应查询优化
CN108369591B (zh) 用于缓存和参数化ir的系统和方法
JP2002251307A (ja) データベース管理システム、データベース管理システムにおける問合せ方法、およびデータベース管理システムにおける問い合わせ実行プログラム
CN111752959B (zh) 一种实时数据库跨库sql交互方法和系统
US20110307874A1 (en) Creating text functions from a spreadsheet
CN105550268A (zh) 大数据流程建模分析引擎
CN102760058B (zh) 面向大规模协作开发的海量软件项目共享方法
CN108694221B (zh) 数据实时分析方法、模块、设备和装置
CN104679500A (zh) 实体类自动生成实现方法及装置
CN115878003B (zh) 一种基于Transformer的RPA网页操作自动化方法及系统
US11429629B1 (en) Data driven indexing in a spreadsheet based data store
CN102521232A (zh) 一种互联网元数据的分布式采集处理系统及方法
CN100483398C (zh) 一种电子数据表的计算方法和装置
US11514236B1 (en) Indexing in a spreadsheet based data store using hybrid datatypes
CN117076491A (zh) 一种数据处理方法、存储介质与设备
CN110008448B (zh) 将SQL代码自动转换为Java代码的方法和装置
CN116401277A (zh) 数据处理方法、装置、系统、设备及介质
CN116301755A (zh) 一种基于有向计算图的自动化批流数据打标框架构建方法
US11500839B1 (en) Multi-table indexing in a spreadsheet based data store
CN114547083A (zh) 数据处理方法、装置及电子设备
CN110333883B (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