一種電子數據表的函式收集方法和裝置

一種電子數據表的函式收集方法和裝置

基本介紹

  • 中文名
  • 申請人
  • 申請日
  • 申請號
  • 公布號
  • 公布日
  • 發明人
  • 地址
  • 分類號
  • 代理機構
  • 代理人
  • 類別
專利背景,發明內容,專利目的,技術方案,改善效果,附圖說明,權利要求,實施方式,操作內容,實施案例,榮譽表彰,
但是在實際套用中,發現上述處理過程在複雜的財務數據處理過程中,存在以下的技術問題:都需要對整張電子數據表中的同一函式進行重複調用,而同一函式的分散重複調用不利於此函式的最佳化執行,致使效率低下。
例如,需要執行計算的電子數據表中,包括M個函式A,函式A需要調用其他數據表中的數據或者其他信息系統的數據完成計算。則2007年5月之前的技術將該電子數據表中的所有公式統籌安排排序後順次執行,上述M個函式A分散存在於得到的公式序列中。因此,在2007年5月之前技術的執行過程中,函式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中所述批量執行的函式為未存儲有計算結果的批量函式。
該發明還提供了另一種電子數據表單元格的函式收集裝置實施例,包括:確定單元,用於確定單元格公式中各函式的調用順序,以及其中的批量函式和非批量函式;運算單元,用於根據所述調用順序依次執行運算,如果是非批量函式,則計算得到該函式的計算結果;如果是批量函式,則存儲該函式及其參數至存儲單元中;執行單元,用於批量執行存儲單元所存儲的批量函式,並返回執行結果給存儲單元;存儲單元,用於存儲批量函式及其參數以及執行單元返回的對應執行結果。
進一步,還可以包括:單元格計算單元,用於根據得到的各批量函式的執行結果,完成單元格的計算。該發明還公開了另一種電子數據表單元格的函式收集裝置實施例,包括:確定單元,用於確定單元格公式中各函式的調用順序,以及其中的批量函式和非批量函式;運算單元,用於根據所述調用順序依次執行運算,如果是非批量函式,則計算得到該函式的計算結果;如果是批量函式,則在預置的存儲單元中查詢該函式及其參數;存儲判斷單元,用於判斷在存儲單元中所查詢的函式及其參數是否存儲於存儲單元中,如果所述存儲單元中存在該函式及其參數的計算結果,則返回該結果值;如果沒有該函式及其參數,則將該函式及其參數存儲至所述存儲單元中,並針對該函式返回一未定值;執行單元,用於批量執行存儲單元所存儲的批量函式,並返回執行結果給存儲單元;存儲單元,用於存儲批量函式及其參數以及執行單元返回的對應執行結果;未定值判斷單元,用於判斷是否還存在具有未定值的函式,如果存在,則再次調用存儲判斷單元和執行單元,直至該單元格公式中沒有具有未定值的函式。
進一步,還可以包括:單元格計算單元,用於根據得到的各批量函式的執行結果,完成單元格的計算。進一步,還可以包括:函式判斷單元,用於判斷在存儲函式及參數之前,所述存儲單元中是否已經存在相同的函式及參數,如果是,則跳過該函式。其中,所述執行單元批量執行的函式為所述存儲單元中未存儲有對應結果的批量函式。優選的,所述未定值判斷單元,用於判斷是否還存在具有未定值的函式,如果存在,則再次調用運算單元、存儲判斷單元和執行單元,直至該單元格公式中沒有具有未定值的函式。
該發明還公開了另一種電子數據表單元格的函式收集裝置實施例,包括:排列單元,用於排列電子數據表中各單元格公式的計算順序;確定單元,用於確定單元格公式中各函式的調用順序,以及其中的批量函式和非批量函式;運算單元,用於根據所述調用順序依次執行運算,如果是非批量函式,則計算得到該函式的計算結果;如果是批量函式,則在預置的存儲單元中查詢該函式及其參數;存儲判斷單元,用於判斷在存儲單元中所查詢的函式及其參數是否存儲於存儲單元中,如果所述存儲單元中存在該函式及其參數的計算結果,則返回該結果值;如果沒有該函式及其參數,則將該函式及其參數存儲至所述存儲單元中,並針對該函式返回一未定值;單元格判斷單元,用於判斷是否還存在未被執行的單元格公式,如果存在,則針對該單元格公式再次調用運算單元和存儲判斷單元;執行單元,用於批量執行存儲單元所存儲的批量函式,並返回執行結果給存儲單元;存儲單元,用於存儲批量函式及其參數以及執行單元返回的對應執行結果;未定值判斷單元,用於判斷是否還存在具有未定值的單元格公式,如果存在,則再次調用存儲判斷單元、單元格判斷單元和執行單元,直至該電子數據表中沒有具有未定值的單元格公式。
進一步,還可以包括:電子數據表計算單元,用於根據得到的各批量函式的執行結果,完成電子數據表的計算。優選的,所述的未定值判斷單元,用於判斷是否還存在具有未定值的單元格公式,如果存在,則再次調用運算單元、存儲判斷單元、單元格判斷單元和執行單元,直至該電子數據表中沒有具有未定值的單元格公式。優選的,單元格判斷單元,用於判斷是否還存在未被執行的單元格公式,如果存在,則針對該單元格公式再次調用確定單元、運算單元和存儲判斷單元。進一步,還可以包括:函式判斷單元,用於判斷在存儲函式及參數之前,所述存儲單元中是否已經存在相同的函式及參數,如果是,則跳過該函式。

改善效果

與2007年5月之前的技術相比,《一種電子數據表的函式收集方法和裝置》尤其適用於所述函式需要調用其他資料庫或者數據表獲取數據的情況,通過確定單元公式中調用函式的順序,以及確定其中的批量函式和非批量函式,當存在非批量函式時,直接計算得到該非批量函式的結果,而對批量函式,則將該批量函式存儲起來進行批量最佳化執行,不用分散重複調用,從而大大提高了電子數據表格及單元格的計算速度。
進一步,將該批量最佳化執行的結果返回存儲單元與函式及其參數對應存儲起來,當下次該函式調用時可以直接返回結果值,從而不再需要進行遠程調用,大大節約系統資源,提高計算速度。在實際套用中,雖然每次收集參數及以參數集合進行函式執行的過程要比2007年5月之前的每個函式單獨執行的過程要費時,但是從整體而言,尤其在電子數據表中函式重複度較高的情況下,可以使整個電子數據表的整體計算速度提升大約10倍左右。

附圖說明

圖1示出了一種電子數據表函式批量計算方法的步驟流程圖;
圖2a示出了一種電子數據表單元格的函式收集方法的步驟流程圖;
圖2b示出了一種解析後獲得的語法樹的示意圖;
圖3示出了另一種電子數據表單元格的函式收集方法的步驟流程圖;
圖4示出了一種電子數據表的函式收集方法的步驟流程圖;
圖5示出了一種電子數據表單元格的函式收集裝置的結構框圖;
圖6示出了另一種電子數據表單元格的函式收集裝置的結構框圖;
圖7示出了一種電子數據表的函式收集裝置的結構框圖。

權利要求

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所述的函式收集裝置,其特徵在於,還包括:函式判斷單元,用於判斷在存儲函式及參數之前,所述存儲單元中是否已經存在相同的函式及參數,如果是,則跳過該函式。

實施方式

操作內容

《一種電子數據表的函式收集方法和裝置》可用於眾多通用或專用的計算系統環境或配置中。例如:個人計算機、伺服器計算機、手持設備攜帶型設備、平板型設備、多處理器系統、基於微處理器的系統、置頂盒、可程式的消費電子設備、網路PC、小型計算機、大型計算機、包括以上任何系統或設備的分散式計算環境等等。
該發明可以在由計算機執行的計算機可執行指令的一般上下文中描述,例如程式模組。一般地,程式模組包括執行特定任務或實現特定抽象數據類型的例程、程式、對象、組件、數據結構等等。也可以在分散式計算環境中實踐該發明,在這些分散式計算環境中,由通過通信網路而被連線的遠程處理設備來執行任務。在分散式計算環境中,程式模組可以位於包括存儲設備在內的本地和遠程計算機存儲介質中。該發明所述的電子數據表的計算方法可以用於計算整張電子數據表的計算,也可以用於完成對其部分區域的計算。
參照圖1,示出了一種電子數據表函式批量計算的方法的步驟流程圖,包括以下步驟:步驟101、掃描電子數據表中的單元格公式,從中收集符合預置條件的函式及其參數。所述函式可以為實際套用中的任一函式,但是最佳的情況,所述函式需要調用外部數據源以完成函式執行,例如,所述函式需要調用外部資料庫或者數據表以完成函式執行,或者所述函式需要調用網際網路信息以完成函式執行等等。
該發明所述的函式批量計算可以由用戶的人工請求觸發,或者,由來自調用例程的請求自動地觸發。所述掃描可以掃描該電子數據表中的所有單元格公式,當然對於存在限制條件的情況下,掃描該電子數據表中一部分的單元格公式也是可行的,該發明對此並不需要加以限定。所述單元格公式可以僅僅包括一個該發明所述的符合預置條件的函式,也可以由多個函式組成,其中包括該發明所述的符合預置條件的函式。
步驟101中所述的收集符合預置條件的函式及其參數的過程可以採用直接字元串匹配的方法收集函式及其參數,也可以採用邊解析邊收集的方法,以滿足單元格公式中的嵌套函式的需要。函式嵌套是指一個函式的參數為另一個函式的返回值,如果存在嵌套函式的情況時,需要首先將內部的函式調用完成後才能繼續外部函式的調用。
步驟102、將所述函式及其參數批量提交給至少一個執行單元。該發明所述的符合預置條件的函式可以為所述電子數據表中的全部函式,即批量收集所有的函式,將其中能夠套用該發明的函式批量提交給至少一個執行單元。所述批量接收函式的執行單元可以為一個或者多個,該領域技術人員根據需要執行的函式確定即可。例如,所述收集的電子數據表中的函式中可以分為不同的幾類函式,則可以分別提交給不同的執行單元分別完成函式的批量最佳化執行,執行完成後,統一返回執行結果即可。所述批量提交可以為一次提交,也可以為分批提交。例如,對於批量較大,執行單元無法一批處理的情況就可以分批提交給執行單元進行多批處理。
該發明所述的符合預置條件的函式也可以為某些特定函式,事先通過函式名稱確定需要收集哪些函式即可。例如,對於電子數據表中的純數值計算函式而言,套用該發明的技術效果並不明顯,所以在批量收集的過程中可以忽略這些純數值計算函式。
步驟103、執行單元針對批量收集的函式及其參數進行最佳化執行。其中的最佳化執行所採用的方案根據不同的函式,可以有所不同,在此該發明無法一一論述。但是該發明對於技術的核心貢獻在於:函式及參數批量收集的方式,從根本上改變了電子數據表中函式執行的過程,使得針對該函式的最佳化執行成為可能。對於單獨一個函式的執行也可以採用一定的最佳化執行方案,而對於函式的批量執行而言,不僅可以採用原有的最佳化執行方案,還可以採用更高級的組合排序等最佳化執行策略,以進一步提高函式的執行效率。優選的,當所述函式為查詢其他資料庫或者數據表以獲取相應數據時,則所述最佳化執行可以包括:以所述參數的數據集合作為執行參數,查詢相應的資料庫或者數據表,完成函式執行。
進一步,對於整張電子數據表而言,上述步驟僅僅完成了部分單元格的計算,甚至僅僅完成了單元格公式的一部分的計算,所以,圖1所示的方法還可以包括步驟104:所述執行單元批量返回所述函式的執行結果;根據所述執行結果,完成整張所述電子數據表的計算。所述執行單元可以向所述電子數據表批量返回執行結果,由包含在所述電子數據表中的執行單元對其他需要運算的部分進行計算。所述執行單元也可以向獨立於所述電子數據表之外的另一個或多個執行單元批量返回執行結果。

實施案例

實施例1
以Java語言為電子數據表編寫外部二次開發模組,用於提供ACCT查詢函式查詢ERP(Enterprise Resource Planning,企業資源管理)資料庫中的數據,ACCT定義為:public Big Decimal 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″)”。2007年5月之前的技術則將上述單元公式進行排序後,順次重複調用上述100個ACCT函式,所耗用的時間近似等於一次ACCT(″001″)調用的100倍。
如果採用該發明進行函式批量計算,則需要考慮對100個ACCT函式的最佳化執行,因為該發明可以批量收集這100個ACCT函式的所有參數,所以最佳化執行的方式之一可以為:連線資料庫、根據函式參數拼裝SQL語句、執行SQL語句、重複操作2和3直至完成所有的函式執行、關閉資料庫連線。上述最佳化執行的過程就可以減少連線資料庫和關閉資料庫連線的多次操作,從而達到提高效率的目的。
為了實現能夠在一次執行中就可以完成100個ACCT函式的執行,則首先要求二次開發模組提供批量查詢函式用於接受批量查詢參數。例如,在二次開發模組設定了ACCTALL函式,定義如下:public Big Decimal [] 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所示方法的相關部分。

榮譽表彰

2015年11月27日,《一種電子數據表的函式收集方法和裝置》獲得第十七屆中國專利獎優秀獎。

相關詞條

熱門詞條

聯絡我們