自定义公式执行方法以及相关设备与流程

文档序号:30748263发布日期:2022-07-13 08:12阅读:81来源:国知局
自定义公式执行方法以及相关设备与流程

1.本技术实施例涉及计算机领域,尤其涉及自定义公式执行方法以及相关设备。


背景技术:

2.企业出于工作需求,常常需要在excel上进行自定义公式的开发,目前主流的在excel上进行自定义公式开发的框架或方案包括exceldna和visual basic宏语言(vba,visual basic for applications)等。这些自定义公式开发方法多用于sheet页级别的本地数据操作,有时会需要连接后台应用程序接口(api,application programming interface)服务。
3.excel作为单线程应用对包含自定义函数的单元格执行计算操作时都需要对单元格中的公式进行解析,然后根据解析后的公式向后台api发送请求,请求api服务对解析后的公式进行计算。因此,当对sheet页面的批量单元格执行调用后台api服务计算的操作时,excel的每个单元格都需要等待前一单元格的请求计算结果得到响应后才向api服务发起本单元格的计算请求,大量的请求和等待会造成excel卡顿甚至死机,进而无法正常使用。


技术实现要素:

4.本技术实施例第一方面提供一种自定义公式执行方法,包括:
5.响应对表格中n个目标单元格中第一待计算公式的批量处理请求,对每个所述第一待计算公式中的引用参数进行解析,得到每个所述第一待计算公式的第一目标公式,其中所述n大于1;
6.对所述n个第一目标公式执行去重操作,得到m个所述第一目标公式,其中所述m小于n;
7.向公式服务器发送针对所述m个第一目标公式的计算请求,以使得所述公式服务器获得并返回所述m个第一目标公式中每个第一目标公式的计算结果;
8.将所述m个第一目标公式的计算结果填入所述表格中所述n个目标单元格。
9.在一种具体实现方式中,在所述响应对表格中n个目标单元格中第一待计算公式的批量处理请求之前,所述方法还包括:
10.响应用户从所述表格中选择n个目标单元格的操作,生成对所述n个目标单元格中第一待计算公式的批量处理请求;
11.或,
12.当所述表格中的单元格满足预设处理条件时,将满足预设处理条件的单元格确定为目标单元格,并生成对所述目标单元格中第一待计算公式的批量处理请求,所述目标单元格为n个。
13.在一种具体实现方式中,在所述响应对表格中n个目标单元格中第一待计算公式的批量处理请求之前,所述方法还包括:
14.响应对所述表格任一单元格中第二待计算公式的单个处理请求,对每个所述第二
待计算公式中的引用参数进行解析,得到每个所述第二待计算公式的第二目标公式;
15.根据缓存中是否存在第二目标公式对应的计算结果,确定每个所述第二目标公式的执行状态;
16.若所述第二目标公式的执行状态为未执行,则将预设占位符填入所述第二目标公式对应的单元格;
17.若所述第二目标公式的执行状态为已执行,则在缓存中获取所述第二目标公式的计算结果,并填入所述第二目标公式对应的单元格。
18.在一种具体实现方式中,所述方法还包括:
19.将填有预设占位符的单元格确定为目标单元格。
20.在一种具体实现方式中,在所述向公式服务器发送针对所述m个第一目标公式的计算请求之前,所述方法还包括:
21.若所述第二待计算公式在填入预设占位符或计算结果后被修改为第一待计算公式,则响应对表格中n个目标单元格中第一待计算公式的批量处理请求,将所述m个第一目标公式中每个所述第一目标公式的执行状态设置为未执行;
22.所述向公式服务器发送针对所述m个第一目标公式的计算请求,包括:
23.若所述m个第一目标公式中每个所述第一目标公式的执行状态为未执行,则向公式服务器发送针对所述m个第一目标公式的计算请求。
24.在一种具体实现方式中,每一次批量请求得到的第一目标公式的计算结果均被存储至缓存;
25.所述向公式服务器发送针对所述m个第一目标公式的计算请求,以使得所述公式服务器获得并返回所述m个第一目标公式中每个第一目标公式的计算结果,包括:
26.若所述缓存中存在所述m个第一目标公式中部分第一目标公式的计算结果,则获取所述m个第一目标公式中部分第一目标公式的计算结果;
27.向公式服务器发送针对所述部分第一目标公式之外的第一目标公式的计算请求,以使得所述公式服务器获得所述部分第一目标公式之外的第一目标公式的计算结果。
28.在一种具体实现方式中,所述将所述m个第一目标公式的计算结果填入所述表格中所述n个目标单元格,包括:
29.将所述m个第一目标公式中每个第一目标公式的计算结果存储至缓存;
30.依次从所述n个目标单元格中确定当前待填入的目标单元格;
31.确定所述当前待填入的目标单元格后,从所述缓存获取所述当前待填入目标单元格对应的第一目标公式的计算结果,并填入所述当前待填入目标单元格。
32.本技术实施例第二方面提供一种自定义公式执行装置,包括:
33.解析单元,用于响应对表格中n个目标单元格中第一待计算公式的批量处理请求,对每个所述第一待计算公式中的引用参数进行解析,得到每个所述第一待计算公式的第一目标公式,其中所述n大于1;
34.去重单元,用于对所述n个第一目标公式执行去重操作,得到m个所述第一目标公式,其中所述m小于n;
35.发送单元,用于向公式服务器发送针对所述m个第一目标公式的计算请求,以使得所述公式服务器获得并返回所述m个第一目标公式中每个第一目标公式的计算结果;
36.填入单元,用于将所述m个第一目标公式的计算结果填入所述表格中所述n个目标单元格。
37.在一种具体实现方式中,所述装置还包括:生成单元;
38.所述生成单元,用于响应用户从所述表格中选择n个目标单元格的操作,生成对所述n个目标单元格中第一待计算公式的批量处理请求;
39.或,
40.所述生成单元,用于当所述表格中的单元格满足预设处理条件时,将满足预设处理条件的单元格确定为目标单元格,并生成对所述目标单元格中第一待计算公式的批量处理请求,所述目标单元格为n个。
41.在一种具体实现方式中,所述解析单元,还用于响应对所述表格任一单元格中第二待计算公式的单个处理请求,对每个所述第二待计算公式中的引用参数进行解析,得到每个所述第二待计算公式的第二目标公式;
42.所述装置还包括:确定单元
43.所述确定单元,根据缓存中是否存在第二目标公式对应的计算结果,确定每个所述第二目标公式的执行状态;
44.所述填入单元,还用于若所述第二目标公式的执行状态为未执行,则将预设占位符填入所述第二目标公式对应的单元格;
45.所述填入单元,还用于若所述第二目标公式的执行状态为已执行,则在缓存中获取所述第二目标公式的计算结果,并填入所述第二目标公式对应的单元格。
46.在一种具体实现方式中,所述确定单元,还用于将填有预设占位符的单元格确定为目标单元格。
47.在一种具体实现方式中,所述装置还包括:修改单元;
48.所述修改单元,用于若所述第二待计算公式在填入预设占位符或计算结果后被修改为第一待计算公式,则响应对表格中n个目标单元格中第一待计算公式的批量处理请求,将所述m个第一目标公式中每个所述第一目标公式的执行状态设置为未执行;
49.所述发送单元,具体用于若所述m个第一目标公式中每个所述第一目标公式的执行状态为未执行,则向公式服务器发送针对所述m个第一目标公式的计算请求。
50.在一种具体实现方式中,每一次批量请求得到的第一目标公式的计算结果均被存储至缓存;
51.所述发送单元,具体用于若所述缓存中存在所述m个第一目标公式中部分第一目标公式的计算结果,则获取所述m个第一目标公式中部分第一目标公式的计算结果;
52.向公式服务器发送针对所述部分第一目标公式之外的第一目标公式的计算请求,以使得所述公式服务器获得所述部分第一目标公式之外的第一目标公式的计算结果。
53.在一种具体实现方式中,所述填入单元,具体用于将所述m个第一目标公式中每个第一目标公式的计算结果存储至缓存;
54.依次从所述n个目标单元格中确定当前待填入的目标单元格;
55.确定所述当前待填入的目标单元格后,从所述缓存获取所述当前待填入目标单元格对应的第一目标公式的计算结果,并填入所述当前待填入目标单元格。
56.本技术实施例第三方面提供一种自定义公式执行装置,包括:
57.中央处理器,存储器以及输入输出接口;
58.所述存储器为短暂存储存储器或持久存储存储器;
59.所述中央处理器配置为与所述存储器通信,并执行所述存储器中的指令操作以执行第一方面所述的方法。
60.本技术实施例第四方面提供一种包含指令的计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行如第一方面所述的方法。
61.本技术实施例第五方面提供一种计算机存储介质,所述计算机存储介质中存储有指令,所述指令在计算机上执行时,使得所述计算机执行如第一方面所述的方法。
62.从以上技术方案可以看出,本技术实施例具有以下优点:接收到对表格中n个目标单元格中第一待计算公式的批量处理请求后,先根据n个第一待计算公式解析而得的n个第一目标公式进行去重,得到m个第一目标公式,然后向公式服务器发送针对所述m个第一目标公式的计算请求,以使得所述公式服务器获得所述m个第一目标公式中每个第一目标公式的计算结果,最后将获得的计算结果填入批量处理请求中对应的目标单元格。在进行去重后,只需要发送m个计算请求,减少了请求发送的数量,进而减少excel的卡顿,保证excel的正常使用。
附图说明
63.图1为本技术实施例公开的自定义公式执行方法的一种流程示意图;
64.图2为本技术实施例公开的自定义公式执行方法的另一流程示意图;
65.图3为本技术实施例公开的自定义公式执行装置一个结构示意图;
66.图4为本技术实施例公开的自定义公式执行装置另一结构示意图。
具体实施方式
67.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
68.目前主流的在excel上进行自定义公式开发的框架或者方案包括excel-dna或vba等。其中,excel-dna是一款基于c#的开源框架,用于开发excel插件,能提供常规的公式开发方案,如自定义参数、返回值、参数提示或智能感知等,可使自定义公式的开发快速、简洁,能基本实现系统预置的函数中包含的功能。而vba实质上是excel中的脚本,通过vba也可以编写自定义函数,存放到某个sheet页或者作为一个独立的excel脚本文件比如xla文件存放。一般的,我们会将我们的自定义函数存在单独的excel脚本.xla文件中,然后在系统加载的时候,将该脚本文件加载进来,然后就可以直接使用里面编写的自定义(udf,user defined function)公式。
69.一般情况下,当用户回车含有udf公式的单元格或者焦点离开含有udf公式的单元格时,会触发针对该单元格的计算。具体的,会先调用插件中预置的函数,然后调用后台api服务获取计算结果,最后将计算结果填充到相应的单元格。传统的实现方案,实现逻辑比较简单,多是针对立即执行的excel公式。当用户将指定公式批量填入大批量单元格时,会生
成针对大批量含有udf公式的单元格执行计算操作时,因为excel是单线程应用的原因,单元格的计算必须一个一个执行,同时调用后台api服务需要等待,产生大量等待时间。同时,excel发送大量计算请求也会造成excel的卡顿甚至死机,影响excel的正常使用。
70.因此,现有的excel中udf函数计算方法没考虑到大批量执行的情况,不适用于大批量含有udf公式的单元格执行计算操作的场景。
71.在不提供原生自定义函数的开发,而是基于excel-dna、vba、vsto等自定义开发工具的基础上,本技术实施例提供自定义公式执行方法以及相关设备,让所有函数处于延迟执行的状态,在需要计算结果时才触发计算,大幅度提高了针对大批量含有udf公式的单元格执行计算操作的执行效率,用于在大批量执行自定义公式时保证excel的正常使用,进而提升用户体验。
72.请参阅图1,本技术实施例提供的一种自定义公式执行方法,包括:
73.101、响应对表格中n个目标单元格中第一待计算公式的批量处理请求,对每个第一待计算公式中的引用参数进行解析,得到每个第一待计算公式的第一目标公式,其中n大于1。
74.响应对表格中n个目标单元格中第一待计算公式的批量处理请求,其中表格为批量处理请求指示的表格,每个目标单元格有一一对应的第一待计算公式,n为大于1的正整数。对每个第一待计算公式中的引用参数进行解析,得到每个第一待计算公式解析后的第一目标公式。其中,引用参数是指,当第一待计算公式中引用前述表格中任一单元格的值时,则表明该任一单元格的值为对应第一待计算公式的引用参数。如,存在待计算公式为:a1+3,且单元格a1的值为5;则5为待计算公式(a1+3)的引用参数。具体的,单元格的值可以是已存在的数值、该单元格中待计算公式的计算结果或该单元格中的待计算公式,本实施例不做限定。
75.在一些实施例中,在响应步骤101中的批量处理请求之前,需要生成该批量处理请求。因此,在响应步骤101中的批量处理请求之前,还有以下步骤:响应用户从表格中选择n个目标单元格的操作,生成对n个目标单元格中第一待计算公式的批量处理请求;或,当表格中的单元格满足预设处理条件时,将满足预设处理条件的单元格确定为目标单元格,并生成对目标单元格中第一待计算公式的批量处理请求,目标单元格为n个。其中,对象可以是终端或用户,此处不作限定。
76.具体的,当批量处理请求由用户发起时,用户可以在表格中选择要进行计算的n个单元格作为目标单元格,并通过批量计算通道对选择的n个目标单元格中的第一待计算公式发起批量处理请求;或者,通过预设处理条件发起针对n个目标单元格中第一待计算公式的批量处理请求。其中,预设处理条件可以是定时或当前所处表格中包含自定义公式的目标单元格达到一定数量时触发的,生成针对n个目标单元格中第一待计算公式的批量处理请求,其中excel当前所处表格中全部或被选中的n个单元格作为目标单元格,本实施例不对预设处理条件作具体限定。
77.102、对n个第一目标公式执行去重操作,得到m个第一目标公式,其中m小于n。
78.在步骤101中对n个第一待计算公式完成解析后,可以得到每个第一待计算公式解析后对应的第一目标公式,即n个第一目标公式。本步骤102中要对n个第一目标公式执行去重操作,最终得到m个第一目标公式。
79.具体的,举例说明:若存在四个第一待计算公式,并且解析得每个第一个待计算公式对应的第一目标公式,分别是a1、a2、a3和a4,其中a3和a4两个第一目标公式相同,则去重后仅保留a1、a2和a3(或a1、a2和a4)三个第一目标公式,即相同的第一目标公式仅保留一个。
80.103、向公式服务器发送针对m个第一目标公式的计算请求,以使得公式服务器获得m个第一目标公式中每个第一目标公式的计算结果。
81.在步骤102中确定完m个第一目标公式后,向公式服务器发送m个第一目标公式中每个第一目标公式的计算请求,以使得公式服务器根据多个计算请求进行计算并返回m个第一目标公式中每个第一目标公式的计算结果。
82.在一些实施例中,每一次批量请求得到的第一目标公式的计算结果均被存储至缓存;若缓存中存在m个第一目标公式中部分第一目标公式的计算结果,则获取m个第一目标公式中部分第一目标公式的计算结果;向公式服务器发送针对部分第一目标公式之外的第一目标公式的计算请求,以使得公式服务器获得部分第一目标公式之外的第一目标公式的计算结果。
83.具体的,每一次批量请求得到的第一目标公式的计算结果都会保存在缓存中。因此,若在步骤101响应的批量处理请求之前,执行过其他的批量请求,且其他的批量请求的第一目标公式,包括步骤103中的m个第一目标公式中部分第一目标公式,因此可以直接从存储包含m个第一目标公式中部分第一目标公式的计算结果的缓存中获取m个第一目标公式中部分第一目标公式的计算结果,且只需向公式服务器发送针对部分第一目标公式之外的第一目标公式的计算请求,以使得公式服务器获得部分第一目标公式之外的第一目标公式的计算结果。
84.104、将m个第一目标公式的计算结果填入表格中n个目标单元格。
85.当步骤103中获取完m个第一目标公式中每个第一目标公式的计算结果后,根据第一目标公式,将步骤103中获得的m个第一目标公式中每个第一目标公式的计算结果填入相应第一目标公式对应的目标单元格。其中,一个第一目标公式可能会对应多个目标单元格。
86.在一些具体实施例中,本步骤104可以通过以下方法实现:将m个第一目标公式中每个第一目标公式的计算结果存储至缓存;依次从n个目标单元格中确定当前待填入的目标单元格;确定当前待填入的目标单元格后,从缓存获取当前待填入目标单元格对应的m个第一目标公式的计算结果,并填入当前待填入目标单元格。
87.具体的,在获取到m个第一目标公式中每个第一目标公式的计算结果后,先将m个第一目标公式中每个第一目标公式的计算结果存储至缓存中,然后依次填入目标单元格中。具体的,依次从n个目标单元格中确定当前待填入的目标单元格;确定当前待填入的目标单元格后,从缓存获取当前待填入目标单元格对应的m个第一目标公式的计算结果,并填入当前待填入目标单元格相应的。每确定完一个当前待填入的目标单元格,就获取相应的计算结果填入,填入后再确定新的当前待填入的目标单元格,直至全部目标单元格都被填入相应的计算结果。
88.前述以及后述实施例中的缓存可以是本地缓存或者云端缓存,且除特殊限定外,每处缓存可以是不同缓存,此处不作具体限定。
89.本实施例中,接收到对表格中n个目标单元格中第一待计算公式的批量处理请求
后,先根据n个第一待计算公式解析而得的n个第一目标公式进行去重,得到m个第一目标公式,然后向公式服务器发送针对m个第一目标公式的计算请求,以使得公式服务器获得m个第一目标公式中每个第一目标公式的计算结果,最后将获得的计算结果填入批量处理请求中对应的目标单元格。在进行去重后,只需要发送m个计算请求,减少了请求发送的数量,进而减少excel的卡顿。同时,让所有第一目标公式处于延迟执行的状态,在需要计算结果时才触发计算,大幅度提高了针对大批量含有udf公式的单元格执行计算操作的执行效率,进而提升用户体验。另外,本技术实施例中提供了步骤101之前生成批量执行请求的具体方法,提升了方案的可实现性。
90.在前述实施例的基础上,在一些具体实施例中,在前述步骤101之前,还包括以下步骤:响应对表格任一单元格中第二待计算公式的单个处理请求,对每个第二待计算公式中的引用参数进行解析,得到每个第二待计算公式的第二目标公式;根据缓存中是否存在第二目标公式对应的计算结果,确定每个第二目标公式的执行状态;若第二目标公式的执行状态为未执行,则将预设占位符填入第二目标公式对应的单元格;若第二目标公式的执行状态为已执行,则在缓存中获取第二目标公式的计算结果,并填入第二目标公式对应的单元格。将填有预设占位符的单元格确定为目标单元格。若第二待计算公式在填入预设占位符或计算结果后被修改为第一待计算公式,则响应对表格中n个目标单元格中第一待计算公式的批量处理请求,将m个第一目标公式中每个第一目标公式的执行状态设置为未执行。步骤103具体通过以下方式实现:若m个第一目标公式中每个第一目标公式的执行状态为未执行,则向公式服务器发送针对m个第一目标公式的计算请求。
91.具体的,在响应对表格中n个目标单元格中第一待计算公式的批量处理请求之前(即执行步骤101之前),还可以对步骤101表格中的任一单元格发起单个处理请求。其中,单个处理请求可以通过对单元格执行回车操作触发或在焦点离开单元格时触发,只要与批量处理请求通过不同的方式触发即可,此处不作限定。
92.另外,某一公式的执行状态是指,缓存中是否保存有该某一公式的计算结果,若有保存,则认为该某一公式的执行状态为已执行;若未保存,则认为该某一公式的执行状态为未执行。若第二目标公式的执行状态为未执行,则将预设占位符填入第二目标公式对应的单元格,其中预设占位符为预先设置的用于指示第二目标公式对应的目标单元格在缓存中没有计算结果的占位符,可以是#refresh或#save,也可以有多个预设占位符,此处不做限定。在一些实施例中,若第二目标公式的执行状态为未执行,则在将预设占位符填入第二目标公式对应的单元格之外,还可以保存该执行状态为未执行的第二目标公式并在没有接收处理请求的时间,向公式服务器发送该执行状态为未执行的第二目标公式的计算请求,并将该执行状态为未执行的第二目标公式的计算结果保存在本地。
93.若第二目标公式的执行状态为已执行,则在缓存中获取第二目标公式的计算结果,并填入第二目标公式对应的单元格。在一些具体实施例中,可能有不止一个目标单元格的第二待计算公式解析后得到的第二目标公式的执行状态为已执行,则对目标单元格的第二待计算公式解析后得到的第二目标公式的执行状态为已执行的每个目标单元格填入缓存中相应的计算结果。
94.进一步的,可以将填有预设占位符的单元格确定为目标单元格,步骤101中相应的批量处理请求即为填有预设占位符的单元格和其他未填入预设占位符但被选择的单元格,
具体不做限定。若批量处理请求的发起对象为用户,则用户可以选择填有预设占位符的单元格作为部分或全部的目标单元格;若批量处理请求的发起对象为终端,则可以自动向填有预设占位符的多个单元格发起批量处理请求。
95.本实施例中,可以在执行批量处理请求前通过单个处理请求获取单元格中公式的执行状态,根据公式的执行状态可以对未进行计算(未经过批量处理请求)的单元格进行状态确定,确定后的状态可作为发起批量处理请求时选择目标单元格的依据。另外,通过在发送请求前清除第一目标公式的执行状态,避免出现将单元格中的第二待计算公式修改为第一待计算公式后并未执行单个处理请求,导致修改后的第一待计算公式的执行状态未发生变更,无法针对该修改后第一待计算公式对应的第一目标公式向公式服务器发送计算请求,这样即使在完成批量处理请求后,该改后第一待计算公式对应的目标单元格中填入的计算结果是错误的,无法批量处理请求应完成的计算。
96.请参阅图2,在前述实施例的基础上,在一个具体实施场景中,本技术实施例提供的自定义公式执行方法由终端和api服务(通过公式服务器完成)完成,其中终端包括三个模块:excel、udfaddin(自定义公式插件)和calculate service(计算服务插件)。
97.具体的,包含以下步骤:
98.201、状态请求
99.当excel接收到针对目标单元格发起的状态请求,excel会利用excel公式自带的功能解析目标单元格中第一待计算公式的引用参数,得到第一目标公式,然后将第一目标公式发送给udfaddin。
100.202、状态请求
101.udfaddin根据第一目标公式生成唯一的key值,并将key值通过com接口发送给calculate service。
102.203、状态答复(已执行)
103.calculate service根据每个目标公式唯一的key值在缓存中查询该key值的执行状态,当执行状态为已执行,从缓存中查找该key值对应的计算结果并返回给udfaddin。
104.204、状态答复(已执行)
105.udfaddin将calculate service发送的该key值对应的计算结果返回给excel,以使得excel将该key值对应的计算结果填入步骤201目标单元格。
106.205、状态答复(未执行)
107.calculate service根据每个目标公式唯一的key值在缓存中查询该key值的执行状态,当执行状态为未执行,将预设占位符发送给udfaddin。
108.206、状态答复(未执行)
109.udfaddin将将预设占位符发送给excel并使得excel填入该预设占位符,以展示给用户该预设占位符告知用户该单元格中第一待计算公式所对应第一目标公式的key值的执行状态,即该单元格中第一待计算公式的执行状态。
110.207、批量执行请求
111.当用户发起针对多个目标单元格的批量处理请求时,udfaddin将该请求发送给calculate service。
112.208、第一唤醒请求
113.calculate service根据步骤207中响应的批量处理请求中包含的目标单元格的信息向excel发送第一唤醒请求,以使得excel发送目标单元格的第一目标公式。具体的,可以是每次发送批量处理请求中包含的目标单元格中的一个目标单元格的唤醒请求,或一次发送批量处理请求中包含的目标单元格中的全部目标单元格的唤醒请求。进一步的,先对接收的udfaddin发送的批量执行请求中的第一目标公式做去重操作,然后针对去重后的第一目标公式向excel发送第一唤醒请求。
114.209、第一目标公式
115.excel在接收到calculate service发送的第一唤醒请求后,可以根据第一唤醒请求向udfaddin发送第一目标公式。
116.210、第一目标公式
117.udfaddin根据第一目标公式生成唯一的key值,并将key值通过com接口发送给calculate service。
118.211、api服务请求
119.calculate service可以根据第一目标公式向api服务发送一个或多个api服务请求(即计算请求),以使得api服务根据api服务请求计算每个第一目标公式。
120.212、api服务答复
121.api服务根据api服务请求计算每个第一目标公式并将每个第一目标公式的计算结果发送至calculate service,以使得calculate service保存每个第一目标公式对应的计算结果至缓存。
122.213、第二唤醒请求
123.在接收完批量唤醒请求中全部第一目标公式的计算结果之后,向excel发送第二唤醒请求,以使得excel根据第二唤醒请求发送针对每个目标单元格的计算结果获取。
124.214、第一目标公式
125.excel根据第二唤醒请求发送每个目标单元格的第一目标公式。
126.215、第一目标公式
127.udfaddin根据第一目标公式生成唯一的key值,并将key值通过com接口发送给calculate service。
128.216、计算结果
129.calculate service根据key值确定缓存中该key值对应的计算结果,并将该计算结果发送给udfaddin。
130.217、计算结果
131.udfaddin根据calculate service发送的计算结果,填入步骤214中的目标单元格。
132.进一步的,步骤214至步骤217可以是对一个目标单元格填入计算结果的流程,而每个目标单元格都需要在前一执行计算结果填入的目标单元格填入完成后才可以开始发送请求(即执行步骤214)。
133.请参阅图3,本技术实施例提供一种自定义公式执行装置,包括:
134.解析单元301,用于响应对表格中n个目标单元格中第一待计算公式的批量处理请求,对每个第一待计算公式中的引用参数进行解析,得到每个第一待计算公式的第一目标
公式,其中n大于1;
135.去重单元302,用于对n个第一目标公式执行去重操作,得到m个第一目标公式,其中m小于n;
136.发送单元303,用于向公式服务器发送针对m个第一目标公式的计算请求,以使得公式服务器获得并返回m个第一目标公式中每个第一目标公式的计算结果;
137.填入单元304,用于将m个第一目标公式的计算结果填入表格中n个目标单元格。
138.在一种具体实现方式中,装置还包括:生成单元;
139.生成单元,用于响应用户从表格中选择n个目标单元格的操作,生成对n个目标单元格中第一待计算公式的批量处理请求;
140.或,
141.生成单元,用于当表格中的单元格满足预设处理条件时,将满足预设处理条件的单元格确定为目标单元格,并生成对目标单元格中第一待计算公式的批量处理请求,目标单元格为n个。
142.在一种具体实现方式中,解析单元301,还用于响应对表格任一单元格中第二待计算公式的单个处理请求,对每个第二待计算公式中的引用参数进行解析,得到每个第二待计算公式的第二目标公式;
143.装置还包括:确定单元
144.确定单元,根据缓存中是否存在第二目标公式对应的计算结果,确定每个第二目标公式的执行状态;
145.填入单元304,还用于若第二目标公式的执行状态为未执行,则将预设占位符填入第二目标公式对应的单元格;
146.填入单元304,还用于若第二目标公式的执行状态为已执行,则在缓存中获取第二目标公式的计算结果,并填入第二目标公式对应的单元格。
147.在一种具体实现方式中,确定单元,还用于将填有预设占位符的单元格确定为目标单元格。
148.在一种具体实现方式中,装置还包括:修改单元;
149.修改单元,用于若第二待计算公式在填入预设占位符或计算结果后被修改为第一待计算公式,则响应对表格中n个目标单元格中第一待计算公式的批量处理请求,将m个第一目标公式中每个第一目标公式的执行状态设置为未执行;
150.发送单元303,具体用于若m个第一目标公式中每个第一目标公式的执行状态为未执行,则向公式服务器发送针对m个第一目标公式的计算请求。
151.在一种具体实现方式中,每一次批量请求得到的第一目标公式的计算结果均被存储至缓存;
152.发送单元303,具体用于若缓存中存在m个第一目标公式中部分第一目标公式的计算结果,则获取m个第一目标公式中部分第一目标公式的计算结果;
153.向公式服务器发送针对部分第一目标公式之外的第一目标公式的计算请求,以使得公式服务器获得部分第一目标公式之外的第一目标公式的计算结果。
154.在一种具体实现方式中,填入单元304,具体用于将m个第一目标公式中每个第一目标公式的计算结果存储至缓存;
155.依次从n个目标单元格中确定当前待填入的目标单元格;
156.确定当前待填入的目标单元格后,从缓存获取当前待填入目标单元格对应的第一目标公式的计算结果,并填入当前待填入目标单元格。
157.本实施例中,接收到对表格中n个目标单元格中第一待计算公式的批量处理请求后,去重单元302先根据解析单元301根据n个第一待计算公式解析而得的n个第一目标公式进行去重,得到m个第一目标公式,然后发送单元303向公式服务器发送针对m个第一目标公式的计算请求,以使得公式服务器获得m个第一目标公式中每个第一目标公式的计算结果,最后填入单元304将获得的计算结果填入批量处理请求中对应的目标单元格。在进行去重后,只需要发送m个计算请求,减少了请求发送的数量,进而减少excel的卡顿,保证excel的正常使用。
158.图4是本技术实施例提供的一种自定义公式执行装置结构示意图,该自定义公式执行装置400可以包括一个或一个以上中央处理器(central processing units,cpu)401和存储器405,该存储器405中存储有一个或一个以上的应用程序或数据。
159.其中,存储器405可以是易失性存储或持久存储。存储在存储器405的程序可以包括一个或一个以上模块,每个模块可以包括对自定义公式执行装置中的一系列指令操作。更进一步地,中央处理器401可以设置为与存储器405通信,在自定义公式执行装置400上执行存储器405中的一系列指令操作。
160.自定义公式执行装置400还可以包括一个或一个以上电源402,一个或一个以上有线或无线网络接口403,一个或一个以上输入输出接口404,和/或,一个或一个以上操作系统,例如windows servertm,mac os xtm,unixtm,linuxtm,freebsdtm等。
161.该中央处理器401可以执行前述图1至图3所示实施例中自定义公式执行装置所执行的操作,具体此处不再赘述。
162.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
163.在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
164.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
165.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
166.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上
或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1