專利名稱:一種電子數(shù)據(jù)表的函數(shù)收集方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機數(shù)據(jù)處理領(lǐng)域,特別是涉及一種電子數(shù)據(jù)表的函數(shù)收集方法和裝置。
背景技術(shù):
電子數(shù)據(jù)表(Spreadsheet)是以表格形式來組織數(shù)據(jù)及信息的計算工具軟件,譬如Microsoft Excel,Lotus1-2-3,Borland Quattro Pro,LinuxGnumeric,WPS表格,永中Office等等。
單元格為電子數(shù)據(jù)表的最基本組成單元,其中可以包含計算公式,用以計算此單元格的數(shù)值。電子數(shù)據(jù)表還可以預(yù)先設(shè)定或由二次開發(fā)者提供一些功能函數(shù),這些函數(shù)可用于單元公式中,以方便用戶使用。
譬如SUM(number1,number2…)函數(shù),一般用于數(shù)據(jù)合計;AVERAGE(number1,number2…)函數(shù)一般用于返回參數(shù)的平均值(算術(shù)平均值);電子數(shù)據(jù)表還可以預(yù)先設(shè)定更為復(fù)雜的函數(shù),例如在Microsoft Excel中的DDB(cost,salvage,life,period,factor)函數(shù);而二次開發(fā)者提供的功能函數(shù)一般更為復(fù)雜,譬如ERP電子數(shù)據(jù)表系統(tǒng)中的ACCT函數(shù)用于從其它信息系統(tǒng)中提取財務(wù)數(shù)據(jù)。
總之,電子數(shù)據(jù)表中單元格能夠使用的公式或者函數(shù)非常多,但是傳統(tǒng)的電子表格程序如Microsoft Excel是利用單個計算鏈處理電子表格中公式的計算和重算,該計算鏈在本質(zhì)上是被輸入到Excel當(dāng)前載入的所有工作表中的全部公式的有序列表。即現(xiàn)有技術(shù)中的電子數(shù)據(jù)表統(tǒng)籌安排其中各單元格的單元公式的計算順序,以解釋或編譯執(zhí)行的方式順次執(zhí)行計算單元公式,位于各個單元公式中的函數(shù)也被順次調(diào)用,從而依次完成整張電子數(shù)據(jù)表的數(shù)據(jù)處理。
但是在實際應(yīng)用中,發(fā)現(xiàn)上述處理過程在復(fù)雜的財務(wù)數(shù)據(jù)處理過程中,存在以下的技術(shù)問題都需要對整張電子數(shù)據(jù)表中的同一函數(shù)進行重復(fù)調(diào)用,而同一函數(shù)的分散重復(fù)調(diào)用不利于此函數(shù)的優(yōu)化執(zhí)行,致使效率低下。
例如,需要執(zhí)行計算的電子數(shù)據(jù)表中,包括M個函數(shù)A,函數(shù)A需要調(diào)用其他數(shù)據(jù)表中的數(shù)據(jù)或者其他信息系統(tǒng)的數(shù)據(jù)完成計算。則現(xiàn)有技術(shù)將該電子數(shù)據(jù)表中的所有公式統(tǒng)籌安排排序后順次執(zhí)行,上述M個函數(shù)A分散存在于得到的公式序列中。因此,在現(xiàn)有技術(shù)的執(zhí)行過程中,函數(shù)A就獨立的、重復(fù)執(zhí)行了M次,而每次執(zhí)行函數(shù)A都需要獨立的從其他數(shù)據(jù)表中查詢、匹配獲取相應(yīng)數(shù)據(jù),然后完成計算,無法實現(xiàn)對函數(shù)A的優(yōu)化執(zhí)行,浪費系統(tǒng)計算資源,計算速率較低。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種電子數(shù)據(jù)表及單元格的函數(shù)收集方法和裝置,可以大大提高電子數(shù)據(jù)表中函數(shù)的收集效率。
為了解決上述問題,根據(jù)本發(fā)明的實施例,公開了一種電子數(shù)據(jù)表的函數(shù)收集方法,包括將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定單元格公式中各函數(shù)的調(diào)用順序;以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;根據(jù)所述調(diào)用順序依次執(zhí)行運算,收集符合預(yù)置條件的函數(shù)及其參數(shù);所述收集過程包括依據(jù)特征值查詢是否存儲有相應(yīng)執(zhí)行結(jié)果的步驟;將所收集的函數(shù)及其參數(shù)批量提交,完成批量執(zhí)行;存儲執(zhí)行結(jié)果與對應(yīng)的函數(shù)及其參數(shù)和特征值。優(yōu)選的,所述的存儲步驟可以為函數(shù)批量執(zhí)行后,以特征值進行定位查詢,將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲。
根據(jù)本發(fā)明的實施例,還公開了一種電子數(shù)據(jù)表單元格的函數(shù)收集方法,其特征在于,包括a、將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序以及確定批量函數(shù)和非批量函數(shù);以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;b、根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則執(zhí)行步驟c;c、在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;d、批量執(zhí)行所存儲的批量函數(shù),得到對應(yīng)的執(zhí)行結(jié)果,并對應(yīng)存儲該結(jié)果值與函數(shù)及其參數(shù)和特征值至所述存儲單元中;e、針對具有未定值的函數(shù),重復(fù)執(zhí)行步驟d和e,直到該單元格公式中沒有具有未定值的函數(shù)。
優(yōu)選的,所述的步驟c為在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,如果所述存儲單元中存在與該特征值對應(yīng)的結(jié)果,則返回該結(jié)果值,否則以該函數(shù)及其參數(shù)進行查詢;如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值,如果存儲單元中沒有相同的函數(shù)及其參數(shù),存儲該函數(shù)及其參數(shù)以及對應(yīng)的特征值至存儲單元,并針對該函數(shù)返回一未定值,所述存儲單元用于存儲已收集的函數(shù)及其參數(shù)和對應(yīng)的特征值,以及相應(yīng)的執(zhí)行結(jié)果。
根據(jù)本發(fā)明的實施例,還公開了一種電子數(shù)據(jù)表的函數(shù)收集方法,包括a、確定電子數(shù)據(jù)表中各單元格公式的計算順序;b、將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序以及確定批量函數(shù)和非批量函數(shù);以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;c、根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則執(zhí)行步驟d;d、在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;e、針對下一單元格,重復(fù)執(zhí)行步驟c和d,直到所需要執(zhí)行的單元格公式都執(zhí)行完畢;f、批量執(zhí)行所存儲的批量函數(shù),得到相應(yīng)的執(zhí)行結(jié)果,并將該結(jié)果值與函數(shù)及其參數(shù)和特征值對應(yīng)存儲至所述存儲單元中;g、針對具有未定值的單元格公式,重復(fù)執(zhí)行步驟d、e和f,直到該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
根據(jù)本發(fā)明的實施例,還公開了一種電子數(shù)據(jù)表的當(dāng)前單元格的函數(shù)收集裝置,包括解析單元,用于將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在解析后的語法樹中的函數(shù)節(jié)點后添加一個特征值節(jié)點,作為此函數(shù)及其參數(shù)的特征值;確定單元,用于確定單元格公式中各函數(shù)的調(diào)用順序,以及其中的批量函數(shù)和非批量函數(shù);運算單元,用于根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值進行查詢;存儲判斷單元,用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;執(zhí)行單元,用于批量執(zhí)行存儲單元所存儲的批量函數(shù),并返回執(zhí)行結(jié)果給存儲單元;存儲單元,用于存儲批量函數(shù)及其參數(shù)和特征值以及執(zhí)行單元返回的對應(yīng)執(zhí)行結(jié)果;未定值判斷單元,用于判斷是否還存在具有未定值的函數(shù),如果存在,則再次調(diào)用存儲判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
根據(jù)本發(fā)明的實施例,還公開了一種電子數(shù)據(jù)表的函數(shù)收集裝置,包括排列單元,用于排列電子數(shù)據(jù)表中各單元格公式的計算順序;解析單元,用于將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在解析后的語法樹中的函數(shù)節(jié)點后添加一個特征值節(jié)點,作為此函數(shù)及其參數(shù)的特征值;確定單元,用于確定單元格公式中各函數(shù)的調(diào)用順序,以及其中的批量函數(shù)和非批量函數(shù);運算單元,用于根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值進行查詢;存儲判斷單元,用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;單元格判斷單元,用于判斷是否還存在未被執(zhí)行的單元格公式,如果存在,則針對該單元格公式再次調(diào)用運算單元和存儲判斷單元;執(zhí)行單元,用于批量執(zhí)行存儲單元所存儲的批量函數(shù),并返回執(zhí)行結(jié)果給存儲單元;存儲單元,用于存儲批量函數(shù)及其參數(shù)和特征值以及執(zhí)行單元返回的對應(yīng)執(zhí)行結(jié)果;未定值判斷單元,用于判斷是否還存在具有未定值的單元格公式,如果存在,則再次調(diào)用存儲判斷單元、單元格判斷單元和執(zhí)行單元,直至該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點本發(fā)明提出了一種電子數(shù)據(jù)表及單元格的函數(shù)收集方法和裝置,尤其適用于所述函數(shù)需要調(diào)用其他數(shù)據(jù)庫或者數(shù)據(jù)表獲取數(shù)據(jù)的情況,通過確定單元公式中調(diào)用函數(shù)的順序,以及確定其中的批量函數(shù)和非批量函數(shù),當(dāng)存在非批量函數(shù)時,直接計算得到該非批量函數(shù)的結(jié)果,而對批量函數(shù),則將該批量函數(shù)存儲起來進行批量優(yōu)化執(zhí)行,不用分散重復(fù)調(diào)用,從而大大提高了電子數(shù)據(jù)表格及單元格的計算速度。
進一步,將該批量優(yōu)化執(zhí)行的結(jié)果返回存儲單元與函數(shù)及其參數(shù)對應(yīng)存儲起來,當(dāng)下次該函數(shù)調(diào)用時可以直接返回結(jié)果值,從而不再需要進行遠(yuǎn)程調(diào)用,大大節(jié)約系統(tǒng)資源,提高計算速度。
進一步,本發(fā)明為單元格公式的函數(shù)及其參數(shù)定義了一個對應(yīng)的特征值,將其作為一個節(jié)點存儲在對應(yīng)單元公式的語法樹中重復(fù)利用,用該特征值來代表對應(yīng)的函數(shù)及其參數(shù)進行查詢操作,因此當(dāng)需要在存儲單元中對該函數(shù)及其參數(shù)為對象進行查詢時,不再以函數(shù)及其參數(shù)本身為對象進行查詢,代之以特征值進行查詢,即以一個簡單的特征值為對象代替多樣的,復(fù)雜的函數(shù)及其參數(shù)進行查詢,提高了查詢函數(shù)的效率,特別是函數(shù)及其參數(shù)需要進行遠(yuǎn)程查詢、多次查詢時,函數(shù)查詢效率的提高更為明顯,從而大大提高了函數(shù)收集的效率。
當(dāng)單元格公式中存在大量相同的批量函數(shù)時,本發(fā)明進一步將這些函數(shù)的特征值都統(tǒng)一為一個特征值,經(jīng)過第一遍查詢后,每一組函數(shù)及其參數(shù)都確定了唯一的特征值,相同的函數(shù)及其參數(shù)的特征值相同,后續(xù)的查詢完全依靠此特征值即可,函數(shù)收集效率的提高更為明顯。
圖1是一種電子數(shù)據(jù)表函數(shù)批量計算的方法的步驟流程圖;圖2a是一種電子數(shù)據(jù)表單元格的函數(shù)收集方法的步驟流程圖;圖2b是一單元公式解析成語法樹后的結(jié)構(gòu)圖;圖3是一種電子數(shù)據(jù)表的函數(shù)收集方法的步驟流程圖;圖4a是本發(fā)明實施例一種電子數(shù)據(jù)表單元格的函數(shù)收集方法步驟流程圖;圖4b是一單元公式解析成語法樹并添加特征值后的結(jié)構(gòu)5是本發(fā)明實施例一種電子數(shù)據(jù)表的函數(shù)收集方法的步驟流程圖;圖6是本發(fā)明實施例一種電子數(shù)據(jù)表單元格的函數(shù)收集裝置的結(jié)構(gòu)框圖;圖7是本發(fā)明實施例一種電子數(shù)據(jù)表的函數(shù)收集裝置的結(jié)構(gòu)框圖。
具體實施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步詳細(xì)的說明。
本發(fā)明可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如個人計算機、服務(wù)器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。
本發(fā)明可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本發(fā)明,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機存儲介質(zhì)中。
參照圖1,示出了一種電子數(shù)據(jù)表函數(shù)批量計算的方法的步驟流程圖,包括以下步驟步驟101、掃描電子數(shù)據(jù)表中的單元格公式,從中收集符合預(yù)置條件的函數(shù)及其參數(shù)。
所述函數(shù)可以為實際應(yīng)用中的任一函數(shù),但是最佳的情況,所述函數(shù)需要調(diào)用外部數(shù)據(jù)源以完成函數(shù)執(zhí)行。
所述的函數(shù)批量計算可以由用戶的人工請求觸發(fā),或者,由來自調(diào)用例程的請求自動地觸發(fā)。所述掃描可以掃描該電子數(shù)據(jù)表中的所有單元格公式,當(dāng)然對于存在限制條件的情況下,掃描該電子數(shù)據(jù)表中一部分的單元格公式也是可行的,本發(fā)明對此并不需要加以限定。
所述單元格公式可以僅僅包括一個本發(fā)明所述的符合預(yù)置條件的函數(shù),也可以由多個函數(shù)組成,其中包括本發(fā)明所述的符合預(yù)置條件的函數(shù)。
步驟101中所述的收集符合預(yù)置條件的函數(shù)及其參數(shù)的過程可以采用直接字符串匹配的方法收集函數(shù)及其參數(shù),也可以采用邊解析邊收集的方法,以滿足單元格公式中的嵌套函數(shù)的需要。函數(shù)嵌套是指一個函數(shù)的參數(shù)為另一個函數(shù)的返回值,如果存在嵌套函數(shù)的情況時,需要首先將內(nèi)部的函數(shù)調(diào)用完成后才能繼續(xù)外部函數(shù)的調(diào)用。
步驟102、將所述函數(shù)及其參數(shù)批量提交給至少一個執(zhí)行單元。
所述的符合預(yù)置條件的函數(shù)可以為所述電子數(shù)據(jù)表中的全部函數(shù),即批量收集所有的函數(shù),將其中能夠應(yīng)用本發(fā)明的函數(shù)批量提交給至少一個執(zhí)行單元。
所述批量接收函數(shù)的執(zhí)行單元可以為一個或者多個,本領(lǐng)域技術(shù)人員根據(jù)需要執(zhí)行的函數(shù)確定即可。
所述批量提交可以為一次提交,也可以為分批提交。例如,對于批量較大,執(zhí)行單元無法一批處理的情況就可以分批提交給執(zhí)行單元進行多批處理。
所述的符合預(yù)置條件的函數(shù)也可以為某些特定函數(shù),事先通過函數(shù)名稱確定需要收集哪些函數(shù)即可。
步驟103、執(zhí)行單元針對批量收集的函數(shù)及其參數(shù)進行優(yōu)化執(zhí)行。
其中的優(yōu)化執(zhí)行所采用的方案根據(jù)不同的函數(shù),可以有所不同,在此本發(fā)明無法一一論述。但是本發(fā)明對于技術(shù)的核心貢獻(xiàn)在于函數(shù)及參數(shù)批量收集的方式,從根本上改變了電子數(shù)據(jù)表中函數(shù)執(zhí)行的過程,使得針對該函數(shù)的優(yōu)化執(zhí)行成為可能。對于單獨一個函數(shù)的執(zhí)行也可以采用一定的優(yōu)化執(zhí)行方案,而對于函數(shù)的批量執(zhí)行而言,不僅可以采用原有的優(yōu)化執(zhí)行方案,還可以采用更高級的組合排序等優(yōu)化執(zhí)行策略,以進一步提高函數(shù)的執(zhí)行效率。
優(yōu)選的,當(dāng)所述函數(shù)為查詢其他數(shù)據(jù)庫或者數(shù)據(jù)表以獲取相應(yīng)數(shù)據(jù)時,則所述優(yōu)化執(zhí)行可以包括以所述參數(shù)的數(shù)據(jù)集合作為執(zhí)行參數(shù),查詢相應(yīng)的數(shù)據(jù)庫或者數(shù)據(jù)表,完成函數(shù)執(zhí)行。
進一步,對于整張電子數(shù)據(jù)表而言,上述步驟僅僅完成了部分單元格的計算,甚至僅僅完成了單元格公式的一部分的計算,所以,圖1所示的方法還可以包括步驟104所述執(zhí)行單元批量返回所述函數(shù)的執(zhí)行結(jié)果;根據(jù)所述執(zhí)行結(jié)果,完成整張所述電子數(shù)據(jù)表的計算。
所述執(zhí)行單元可以向所述電子數(shù)據(jù)表批量返回執(zhí)行結(jié)果,由包含在所述電子數(shù)據(jù)表中的執(zhí)行單元對其他需要運算的部分進行計算。所述執(zhí)行單元也可以向獨立于所述電子數(shù)據(jù)表之外的另一個或多個執(zhí)行單元批量返回執(zhí)行結(jié)果。
下面對步驟101中采用直接匹配法收集函數(shù)并完成計算的過程進行說明直接匹配法的核心思想就是通過字符串匹配的方法收集函數(shù)及其參數(shù)。譬如利用Excel完成針對針對某ERP系統(tǒng)的報表在Excel單元格中輸入公式=SUM(ACCT(“001”),100),SUM函數(shù)是Excel所能識別的,ACCT函數(shù)是用來從ERP系統(tǒng)中提取數(shù)據(jù)的擴展函數(shù),Excel系統(tǒng)不能識別。這時候可以應(yīng)用直接匹配法。
通過這種直接匹配法雖然能夠完成一些函數(shù)及其參數(shù)的收集,但由于它是對函數(shù)(參數(shù))直接進行字符串的匹配,所以它并不能很好的解決批量函數(shù)嵌套時如何收集的問題,如對=ACCT(ACCT(“001”)這種函數(shù)就不能收集成功。雖然能夠匹配到合適的函數(shù),但是無法確定其參數(shù);同時無法將函數(shù)的收集過程與電子數(shù)據(jù)表的計算過程更好的結(jié)合起來,以進一步提高電子數(shù)據(jù)表的整體運算速度。
所以對此提出了更為優(yōu)選的實施例,以解決上述問題。該實施例解決問題的核心在于首先確定單元格公式中函數(shù)的調(diào)用順序,在調(diào)用單元格公式中的函數(shù)時,在預(yù)先設(shè)置的存儲單元中查詢該函數(shù)及其參數(shù),如果有該函數(shù)及其參數(shù)的結(jié)果則直接返回該結(jié)果值,并繼續(xù)執(zhí)行;否則,存儲單元存儲該函數(shù)及其參數(shù),返回一個未定值,并繼續(xù)執(zhí)行;將存儲單元存儲的函數(shù)及其參數(shù)交由執(zhí)行單元執(zhí)行,并將該返回的執(zhí)行結(jié)果與函數(shù)及其參數(shù)對應(yīng)存儲在存儲單元中;重復(fù)上述步驟,當(dāng)該單元公式中沒有未定值時,表明所有函數(shù)都收集完畢,退出函數(shù)收集過程。從而解決了嵌套函數(shù)的收集問題,并且能夠為函數(shù)的批量執(zhí)行提供基礎(chǔ),從而可以提高整個電子數(shù)據(jù)表格的運算速度。
參照圖2a,示出了一種電子數(shù)據(jù)表單元格的函數(shù)收集方法的步驟流程圖,包括以下步驟步驟201、確定調(diào)用順序以及其中的批量函數(shù)和非批量函數(shù)。
確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序,確定單元格公式中函數(shù)順序的方法有多種,例如,下述兩種方式都是可行的a、將單元公式解析為語法樹,執(zhí)行語法樹時各函數(shù)的調(diào)用次序就是確定的;b、采用早期Basic語言逐詞解釋、遞歸調(diào)用執(zhí)行的方式也可以確定函數(shù)的調(diào)用次序。
本發(fā)明優(yōu)先采用的是將包含函數(shù)的當(dāng)前單元格公式解析成語法樹的方式,從而確定其中的各個函數(shù)的調(diào)用順序。
解析成語法樹的方法在計算機編譯過程中經(jīng)常用到。傳統(tǒng)的計算機語言的編譯過程大概如下讀入文本源代碼→詞法語法解析→抽象語法樹→語義分析→代碼生成。
對于本發(fā)明將當(dāng)前單元格中的計算公式解析成語法樹的過程,可以采用與上述基本相同的原理。
譬如對于單元公式=10+SUM(1,ACCT(”001”)),參照圖2a,是其解析為語法樹后的形式;以數(shù)組數(shù)據(jù)結(jié)構(gòu)存儲形式為(10,1,”001”,ACCT,SUM,+)。從數(shù)組存儲形式的語法樹可以看到函數(shù)的執(zhí)行順序,ACCT是先執(zhí)行的,ACCT函數(shù)執(zhí)行完成后其返回值和”1”作為SUM的參數(shù)繼續(xù)執(zhí)行,SUM的返回值與”10”相加,整個公式計算完成。
批量函數(shù)和非批量函數(shù)的確定方式有很多種,函數(shù)名稱標(biāo)識、配置文件、注冊等等方式,對于本發(fā)明來說并不關(guān)鍵,在此就不加以詳述了。
從語法樹執(zhí)行效率方面考慮,可以將是否為批量函數(shù)的標(biāo)簽直接標(biāo)識在語法樹的函數(shù)節(jié)點上,這在解析公式的時候一并完成就可以了。
所述的批量函數(shù)是可以批量收集和批量執(zhí)行的函數(shù),如ACCT(“001”)、ACCT(“002”),因為批量函數(shù)可以批量收集,批量優(yōu)化執(zhí)行,可以提高計算速度。
步驟202、如果該函數(shù)為非批量函數(shù),則直接計算得到該函數(shù)的結(jié)果。該步驟的優(yōu)點之一在于,滿足一些情況下,批量函數(shù)的參數(shù)是非批量函數(shù)的情況。
步驟203、如果該函數(shù)為批量函數(shù),則到存儲單元中去查詢。
步驟204、如果存儲單元中有該函數(shù)及其參數(shù)的計算結(jié)果,則直接返回該結(jié)果值,從而節(jié)省一次函數(shù)的調(diào)用過程。
步驟205、如果沒有該函數(shù)及其參數(shù),則說明該函數(shù)及其參數(shù)是第一次調(diào)用,則將該函數(shù)及其參數(shù)存儲入存儲單元,完成函數(shù)及參數(shù)的收集,并針對該函數(shù)返回一個預(yù)定義的未定值,單元公式的剩余部分繼續(xù)執(zhí)行。這樣,對有嵌套函數(shù)的單元公式已收集了最里層的函數(shù)。所述的未定值用來表明該函數(shù)及包含該函數(shù)的單元格公式?jīng)]有完成計算,包含未定值的函數(shù)其結(jié)果仍然是未定值,包含未定值函數(shù)的單元格公式結(jié)果也為未定值,當(dāng)然,也可以采用其他的標(biāo)記來進行說明。
進一步,當(dāng)該存儲單元中存在該函數(shù)及其參數(shù),但沒有與之對應(yīng)的結(jié)果值時,則說明該函數(shù)及其參數(shù)已經(jīng)被收集了,此時則跳過函數(shù)的收集。
步驟206、存儲單元將第一遍收集的函數(shù)及其參數(shù)交給執(zhí)行單元批量執(zhí)行,執(zhí)行單元執(zhí)行完畢后將該執(zhí)行結(jié)果返回給存儲單元,存儲單元將執(zhí)行結(jié)果與函數(shù)及其參數(shù)對應(yīng)存儲起來。從而下次查詢該函數(shù)及其參數(shù)時,可以直接返回該函數(shù)及其參數(shù)的執(zhí)行值。
然后重復(fù)步驟203、204、205、206,對具有未定值的函數(shù)進行函數(shù)的收集及計算,通過該重復(fù)步驟解決嵌套函數(shù)的收集,當(dāng)再收集不到新的函數(shù)時,則整體計算完成。進一步,所述重復(fù)步驟優(yōu)選的是將全部具有未定值的函數(shù)重復(fù)執(zhí)行一次后再開始下一循環(huán)。
進一步,另一種情況,對返回未定值的函數(shù)及公式來說,在某些情況下,例如,批量函數(shù)的執(zhí)行結(jié)果作為非批量函數(shù)的參數(shù)時,則就需要對該非批量函數(shù)進行計算,即需要重復(fù)步驟202、203、204、205、206,一直重復(fù)上述步驟,直至該單元格公式中沒有具有未定值的函數(shù),從而說明收集結(jié)束。
至此,單元格公式中的函數(shù)收集已經(jīng)完成,本領(lǐng)域技術(shù)人員可以應(yīng)用收集結(jié)果進行統(tǒng)計、分析等等操作,當(dāng)然,也可以用于完成當(dāng)前單元格的計算,例如,優(yōu)選的,本實施例還可以包括步驟207、根據(jù)得到的各批量函數(shù)的執(zhí)行結(jié)果完成當(dāng)前單元格的計算。
對于非批量函數(shù)的計算結(jié)果可以采用緩存的方式,然后與批量函數(shù)的執(zhí)行結(jié)果一起完成當(dāng)前單元格的計算。例如,順序執(zhí)行該單元格公式,碰到批量函數(shù),則查詢獲得相應(yīng)的執(zhí)行結(jié)果,碰到非批量函數(shù),也查詢獲得相應(yīng)的計算結(jié)果,從而完成整個單元格的計算。
當(dāng)然,如果相比較而言,計算非批量函數(shù)的資源消耗比緩存方式的資源消耗更小,則也可以采用重復(fù)計算的方式實現(xiàn)。例如,順序執(zhí)行該單元格公式,碰到批量函數(shù),則查詢獲得相應(yīng)的執(zhí)行結(jié)果,碰到非批量函數(shù),則計算其結(jié)果,從而完成整個單元格的計算。
參照圖3,示出了一種電子數(shù)據(jù)表的函數(shù)收集方法的步驟流程圖,它與圖2所示方法的區(qū)別在于,該方法是針對整個電子數(shù)據(jù)表的,該電子數(shù)據(jù)表可以包括很多的單元格公式,所述的電子數(shù)據(jù)表的計算方法可以用于計算整張電子數(shù)據(jù)表的計算,也可以用于完成對其部分區(qū)域的計算。圖3所示實施例具體可以包括以下步驟步驟301、確定電子數(shù)據(jù)表中各單元公式的計算順序。
對于如何確定電子數(shù)據(jù)表中各單元公式的計算順序,本領(lǐng)域技術(shù)人員可以采用各種可行的方法,主要的核心思想是被依賴者先完成計算,如C1=A1+B1,單元格C1依賴單元格A1和B1,則計算順序為A1->B1->C1,保證計算C1之前A1和B1已完成計算。例如,在申請?zhí)枮?00510089360.4的專利公開文件中公開了一種排列單元公式的方法,在此不再予以詳述。
步驟302、確定調(diào)用順序及其中的批量函數(shù)和非批量函數(shù)。步驟303、如果該函數(shù)為非批量函數(shù),則直接計算得到該函數(shù)的結(jié)果。步驟304、如果該函數(shù)為批量函數(shù),則到存儲單元中去查詢。步驟305、如果存儲單元中有該函數(shù)及其參數(shù)的計算結(jié)果,則直接返回該結(jié)果值。步驟306、如果沒有該函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)存儲入存儲單元,并針對該函數(shù)返回一個預(yù)定義的未定值,單元公式的剩余部分繼續(xù)執(zhí)行。這樣,對有嵌套函數(shù)的單元公式已收集了最里層的函數(shù)。與圖2所示的方法中的步驟基本相似,為了篇幅考慮,在此不再詳述。
這樣就完成了電子數(shù)據(jù)表格中第一個單元格公式函數(shù)的計算、收集,然后判斷是否還有下一個單元格,如果有,則重復(fù)步驟302、303、304、305、306,對下一個單元格公式進行第一次計算、收集。當(dāng)電子數(shù)據(jù)表格中所有單元格公式都完成第一次收集后,進入步驟307。
當(dāng)然,也可以在步驟302中就對該電子數(shù)據(jù)表中的所有待計算單元格公式進行函數(shù)順序確定(例如,統(tǒng)一完成語法樹的解析過程并緩存結(jié)果),則上述重復(fù)循環(huán)的步驟可以僅僅重復(fù)303、304、305、306,對下一個單元格公式進行一次計算、收集。
步驟307、存儲單元將第一遍收集的函數(shù)及其參數(shù)交給執(zhí)行單元批量執(zhí)行,執(zhí)行單元執(zhí)行完畢后將該執(zhí)行結(jié)果返回給存儲單元,存儲單元將執(zhí)行結(jié)果與函數(shù)及其參數(shù)對應(yīng)存儲起來,從而下次查詢該函數(shù)及其參數(shù)時,可以直接返回該函數(shù)及其參數(shù)的執(zhí)行值。
然后重復(fù)步驟304、305、306、307,再次對具有未定值的單元格公式進行函數(shù)的收集及計算。當(dāng)電子數(shù)據(jù)表中不存在具有未定值的單元格公式時,則收集結(jié)束。
進一步,另一種情況,對具有未定值的單元格公式來說,如果沒有緩存語法樹,則需要重新確定函數(shù)的調(diào)用順序和重新確定批量函數(shù)及非批量函數(shù),這時就需要重復(fù)步驟302、303、304、305、306、307,一直重復(fù)上述步驟,直至電子數(shù)據(jù)表中不存在具有未定值的單元格公式,則說明收集結(jié)束,不需要再次重復(fù)。
收集完成后,優(yōu)選的,該實施例還可以包括步驟308、根據(jù)各單元公式中非批量函數(shù)的計算結(jié)果和批量函數(shù)的執(zhí)行結(jié)果完成整個電子數(shù)據(jù)表的計算。
對于有N層嵌套的函數(shù)來說,需要收集N+1次才能把單元公式的函數(shù)全部收集完畢,當(dāng)收集了N+1次后,單元公式中沒有未定值,從而單元公式中函數(shù)的收集完成,這樣計算隊列中所有的未定值都被刪除掉。共要進行N+2遍計算才能完成電子數(shù)據(jù)表的整體計算。
下面還是以一個實例來具體說明該方法流程。
假設(shè)電子數(shù)據(jù)表A1=sum(100,200);B1=ACCT(“001”);C1=ACCT(ACCT(“002”));D1=ACCT(“002”)。其中,A1=sum(100,200)為非批量函數(shù);B1=ACCT(“001”)為批量函數(shù);C1=ACCT(ACCT(“002”))為嵌套函數(shù);D1=ACCT(“002”)為批量函數(shù)。
計算隊列為{A1,B1,C1,D1},按照上述循環(huán)執(zhí)行。
第一遍A1為非批量函數(shù),直接執(zhí)行完畢,A1值為300。將A1從計算隊列中摘除;B1為批量函數(shù),收集ACCT函數(shù)及其參數(shù)“001”,B1值為未定值;收集C1內(nèi)層中的ACCT函數(shù)及其參數(shù)“002”,C1值為未定值;D1為批量函數(shù),ACCT函數(shù)及其參數(shù)“002”已被C1收集過,D1值為未定值;本輪收集批量函數(shù)2個,分別為ACCT(“001”)、ACCT(“002”),將這兩個函數(shù)提交給執(zhí)行單元執(zhí)行,批量執(zhí)行ACCT(“001”)=“100”,ACCT(“002”)=“200”,執(zhí)行完畢后,返回該執(zhí)行結(jié)果給存儲單元,函數(shù)收集單元將函數(shù)及其參數(shù)ACCT(“001”)、ACCT(“002”)以及與其對應(yīng)的結(jié)果100、200存儲,以便下次函數(shù)調(diào)用時利用。
第二遍本次步驟的重復(fù)執(zhí)行僅僅針對具有未定值的單元格公式有B1、C1和D1即可。
B1包含的批量函數(shù)ACCT函數(shù)及其參數(shù)“001”已有查詢結(jié)果“100”,執(zhí)行完畢,B1值為“100”,將B1從計算隊列中摘除;C1包含的批量函數(shù)ACCT函數(shù)及其參數(shù)“002”已有查詢結(jié)果“200”,收集外層函數(shù)ACCT及參數(shù)“200”,轉(zhuǎn)化為公式C1=ACCT(“200”),C1值為未定值;D1包含的批量函數(shù)ACCT函數(shù)及其參數(shù)“002”已有查詢結(jié)果“200”,執(zhí)行完畢,D1值為“200”,將D1從計算隊列中摘除;本輪收集批量函數(shù)1個,為ACCT(“200”),將這兩個函數(shù)提交給執(zhí)行單元執(zhí)行,批量執(zhí)行ACCT(“200”)=“888”,執(zhí)行完畢后,返回該執(zhí)行結(jié)果給存儲單元,函數(shù)收集單元將函數(shù)及其參數(shù)ACCT(“200”)以及與其對應(yīng)的結(jié)果888存儲。
第三遍本次步驟的重復(fù)執(zhí)行中具有未定值的單元格公式只有C1了。
C1包含的批量函數(shù)ACCT函數(shù)及其參數(shù)“002”已有查詢結(jié)果“200”,外層函數(shù)ACCT及參數(shù)“200”也有查詢結(jié)果“888”,執(zhí)行完畢,C1值為“100”,將C1從計算隊列中摘除;本輪收集批量函數(shù)0個,退出循環(huán),最后根據(jù)非批量函數(shù)的計算結(jié)果和批量函數(shù)的執(zhí)行結(jié)果完成電子數(shù)據(jù)表整體計算。
雖然上述幾個實施例所提供的函數(shù)收集方法解決了嵌套函數(shù)的收集問題,并且能夠為函數(shù)的批量執(zhí)行提供基礎(chǔ),提高了整個電子數(shù)據(jù)表格中函數(shù)的收集效率。但因為該函數(shù)收集的方法要以函數(shù)及其參數(shù)為對象在存儲單元中查詢。通常這樣的查詢會發(fā)生三次。即第一次、在首次執(zhí)行包含指定函數(shù)的單元公式時,以函數(shù)及其參數(shù)為對象在存儲單元中查詢是否已收集此函數(shù)及其參數(shù);第二次、函數(shù)及其參數(shù)收集完成后,將存儲單元中的所有函數(shù)及其參數(shù)打包為一個數(shù)據(jù)包傳給執(zhí)行單元進行執(zhí)行,函數(shù)執(zhí)行完成后數(shù)據(jù)包中包含對應(yīng)每個函數(shù)及其參數(shù)的計算結(jié)果。將該數(shù)據(jù)包中的結(jié)果導(dǎo)入存儲單元時需要再次以該函數(shù)及其參數(shù)為對象進行查詢定位,從而使該執(zhí)行結(jié)果與函數(shù)及其參數(shù)一一對應(yīng)存儲;第三次、一次批量函數(shù)執(zhí)行完成后,對剛才收集過函數(shù),未完成單元公式計算的單元節(jié)點再次計算,需要再次以該函數(shù)及其參數(shù)為對象去存儲單元中查詢結(jié)果值。
因為函數(shù)及其參數(shù)的多樣性,以函數(shù)及其參數(shù)為對象進行查詢是個耗時的操作,對同一組函數(shù)及其參數(shù),進行了3次完全相同的耗時操作,影響了函數(shù)收集的效率,并有計算機資源的不必要浪費。
所以本發(fā)明對此提出了更為優(yōu)選的實施例,減少以函數(shù)及其參數(shù)為對象進行查詢,以解決上述問題。該實施例解決問題的核心在于為單元格公式的函數(shù)及其參數(shù)定義了一個對應(yīng)的特征值,將其作為一個節(jié)點存儲在對應(yīng)單元公式的語法樹中重復(fù)利用,用該特征值代表對應(yīng)的函數(shù)及其參數(shù)進行查詢操作,因此當(dāng)需要在存儲單元中對該函數(shù)及其參數(shù)為對象進行查詢時,不再以函數(shù)及其參數(shù)本身為對象進行查詢,代之以特征值進行查詢,即以一個簡單的特征值為對象代替多樣的,復(fù)雜的函數(shù)及其參數(shù)進行查詢,提高了查詢函數(shù)的效率,特別是函數(shù)及其參數(shù)需要進行遠(yuǎn)程查詢、多次查詢時,函數(shù)查詢效率的提高更為明顯,從而大大提高了函數(shù)收集的效率。
當(dāng)單元格公式中存在大量相同的批量函數(shù)時,本發(fā)明進一步將這些函數(shù)的特征值都統(tǒng)一為一個特征值,經(jīng)過第一遍查詢后,每一組函數(shù)及其參數(shù)都確定了唯一的特征值,相同的函數(shù)及其參數(shù)的特征值相同,后續(xù)的查詢完全依靠此特征值即可,函數(shù)收集效率的提高更為明顯。
參照圖4a,示出了本發(fā)明另一種電子數(shù)據(jù)表單元格的函數(shù)收集方法的步驟流程圖,包括以下步驟步驟401、將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在語法樹中增加一個特征值節(jié)點。
解析成語法樹的方法在計算機編譯過程中經(jīng)常用到。傳統(tǒng)的計算機語言的編譯過程大概如下讀入文本源代碼→詞法語法解析→抽象語法樹→語義分析→代碼生成。
對于本發(fā)明將當(dāng)前單元格中的計算公式解析成語法樹的過程,可以采用與上述基本相同的原理。至于具體的解析過程,在圖8所示的實施例中已經(jīng)詳細(xì)描述過了,在此不再予以詳述。
該函數(shù)及其參數(shù)分別作為此語法樹的節(jié)點,并緊隨該函數(shù)節(jié)點添加一個特征值節(jié)點,作為對應(yīng)此函數(shù)及其參數(shù)的特征值,從而在以后的查詢步驟中,不再以復(fù)雜多樣的函數(shù)及其參數(shù)為對象進行查詢操作,而以對應(yīng)該函數(shù)及其參數(shù)的特征值進行查詢操作,特征值通常比對應(yīng)的函數(shù)及其參數(shù)簡單的多,所以可以提高查詢的效率,節(jié)約計算機資源。
譬如對于單元公式=10+SUM(1,ACCT(“001”)),參照圖4b,是其解析為語法樹后并對函數(shù)及其參數(shù)ACCT(“001”)添加整數(shù)特征值節(jié)點b1(其值為“10”)的形式。
所述語法樹還可以用來確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序。當(dāng)然,本領(lǐng)域的技術(shù)人員知道還可以采用其他的方法來確定公式中各函數(shù)的調(diào)用順序,如采用早期Basic語言逐詞解釋、遞歸調(diào)用執(zhí)行的方式來確定函數(shù)的調(diào)用次序。本發(fā)明優(yōu)選的是采用解析后的語法樹來確定公式中各函數(shù)的調(diào)用順序,這樣可以重復(fù)利用解析后的語法樹,提高函數(shù)收集的效率。
所述語法樹也可以用來確定當(dāng)前單元格公式的批量函數(shù)和非批量函數(shù),顯而易見,本領(lǐng)域的技術(shù)人員也可以采用其他的方式來確定單元格公式中的批量函數(shù)和非批量函數(shù)。如采用函數(shù)名稱標(biāo)識、配置文件、注冊等方式,都可以對單元格公式中的批量函數(shù)和非批量函數(shù)進行識別,對于本發(fā)明來說并不關(guān)鍵,在此就不加以詳述了,本發(fā)明優(yōu)選采用解析后的語法樹來確定單元格公式中的批量函數(shù)和非批量函數(shù),同樣是因為可以重復(fù)利用解析后的語法樹,提高函數(shù)收集的效率。
優(yōu)選的,所述特征值采用一個遞增的整數(shù)值,采用遞增整數(shù)作為特征值是為了保證特征值的唯一性。極端的情況,如果此整數(shù)在大量的解析過程中遞增趨向整數(shù)最大值時則可回頭從整數(shù)最小值開始,顯而易見,正常的電子數(shù)據(jù)表中是不會出現(xiàn)整數(shù)極限個函數(shù)的,所以可以保證此整數(shù)特征值的唯一性。當(dāng)然也可以采用其他的方式達(dá)到特征值唯一性的目的,如采用當(dāng)前的系統(tǒng)時間等作為特征值,但都不如整數(shù)增量特征值簡單高效。本發(fā)明也不對此加以限定。
因為在解析語法樹的過程中很容易就能識別出單元格公式中的批量函數(shù)和非批量函數(shù),非批量函數(shù)在本發(fā)明的優(yōu)選實施例中并不需要進行查詢操作,所以在本發(fā)明進一步優(yōu)選的實施例中不需要對非批量函數(shù)定義特征值,即只在批量函數(shù)節(jié)點后添加一個特征值節(jié)點,這樣可以節(jié)約整數(shù)特征值,節(jié)約了計算機系統(tǒng)資源。
步驟402、根據(jù)解析后的語法樹確定的函數(shù)調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果,該步驟的優(yōu)點之一在于,滿足一些情況下,批量函數(shù)的參數(shù)是非批量函數(shù)的情況。
步驟403、如果是批量函數(shù),則以該函數(shù)及其參數(shù)的特征值到存儲單元中去查詢。
步驟404、如果存儲單元中存儲有該特征值對應(yīng)的結(jié)果值,則直接返回該結(jié)果值。這樣就節(jié)省了一次函數(shù)的調(diào)用過程。特別的,該步驟不再以函數(shù)及其參數(shù)為對象進行查詢操作,而是以一個簡單的特征值進行查詢操作,這在需要進行遠(yuǎn)程查詢操作時效率提高極為明顯。
步驟405、如果存儲單元中沒有存儲與該特征值對應(yīng)的結(jié)果值,則說明該函數(shù)及其參數(shù)和對應(yīng)的特征值沒有被收集過,則將該函數(shù)及其參數(shù)和對應(yīng)的特征值存儲入存儲單元,完成該函數(shù)及其參數(shù)和特征值的收集。并針對該函數(shù)返回一個未定值。單元公式的剩余部分繼續(xù)執(zhí)行。這樣,對有嵌套函數(shù)的單元公式已收集了最里層的函數(shù)。所述的未定值用來表明該函數(shù)及包含該函數(shù)的單元格公式?jīng)]有完成計算,包含未定值的函數(shù)其結(jié)果仍然是未定值,包含未定值函數(shù)的單元格公式結(jié)果也為未定值,當(dāng)然,也可以采用其他的標(biāo)記來進行說明。所述未定值的作用在前面的實施例中已經(jīng)詳細(xì)描述過,在此也不再詳述。
步驟406、存儲單元將第一遍收集的函數(shù)及其參數(shù)交給執(zhí)行單元批量執(zhí)行,執(zhí)行單元執(zhí)行完畢后將該執(zhí)行結(jié)果返回給存儲單元,存儲單元將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲起來。從而下次查詢該特征值時,可以直接返回該特征值的執(zhí)行結(jié)果。
在該步驟中,當(dāng)執(zhí)行單元將函數(shù)執(zhí)行完畢后返回執(zhí)行結(jié)果給存儲單元時,可以以函數(shù)及其參數(shù)為對象進行查詢,從而將執(zhí)行結(jié)果與函數(shù)及其參數(shù)對應(yīng)存儲起來,但本發(fā)明優(yōu)選的是以該函數(shù)及其參數(shù)的特征值為對象進行查詢,從而將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲起來。如果執(zhí)行單元和存儲單元不在同一個系統(tǒng)中時,這樣對查詢效率的提高是非常明顯的。
然后重復(fù)步驟403、404、405、406,對具有未定值的函數(shù)進行收集及計算,通過該重復(fù)步驟解決嵌套函數(shù)的收集,當(dāng)再收集不到新的函數(shù)時,則整體計算完成。進一步,所述重復(fù)步驟優(yōu)選的是將全部具有未定值的函數(shù)重復(fù)執(zhí)行一次后再開始下一循環(huán)。
進一步,另一種情況,對返回未定值的函數(shù)及公式來說,在某些情況下,例如,批量函數(shù)的執(zhí)行結(jié)果作為非批量函數(shù)的參數(shù)時,則就需要對該非批量函數(shù)進行計算,即需要重復(fù)步驟402、403、404、405、406,一直重復(fù)上述步驟,直至該單元格公式中沒有具有未定值的函數(shù),從而說明收集結(jié)束。
至此,單元格公式中的函數(shù)收集已經(jīng)完成,本領(lǐng)域技術(shù)人員可以應(yīng)用收集結(jié)果進行統(tǒng)計、分析等等操作,當(dāng)然,也可以用于完成當(dāng)前單元格的計算,例如,優(yōu)選的,本實施例還可以包括步驟407、根據(jù)得到的各批量函數(shù)的執(zhí)行結(jié)果完成當(dāng)前單元格的計算。
對于非批量函數(shù)的計算結(jié)果可以采用緩存的方式,然后與批量函數(shù)的執(zhí)行結(jié)果一起完成當(dāng)前單元格的計算。例如,順序執(zhí)行該單元格公式,碰到批量函數(shù),則查詢獲得相應(yīng)的執(zhí)行結(jié)果,碰到非批量函數(shù),也查詢獲得相應(yīng)的計算結(jié)果,從而完成整個單元格的計算。
當(dāng)然,如果相比較而言,計算非批量函數(shù)的資源消耗比緩存方式的資源消耗更小,則也可以采用重復(fù)計算的方式實現(xiàn)。例如,順序執(zhí)行該單元格公式,碰到批量函數(shù),則查詢獲得相應(yīng)的執(zhí)行結(jié)果,碰到非批量函數(shù),則計算其結(jié)果,從而完成整個單元格的計算。
優(yōu)選的,在步驟405中,如果存儲單元中沒有存儲該特征值對應(yīng)的結(jié)果值時,則以該函數(shù)及其參數(shù)進行查詢,如果存儲單元中存在相同的函數(shù)及其參數(shù),則說明該函數(shù)及其參數(shù)已經(jīng)被收集過了。以存儲單元中已經(jīng)存儲的相同函數(shù)及其參數(shù)對應(yīng)的特征值替換該查詢函數(shù)及其參數(shù)在語法樹中的特征值,通過該替換步驟后,相同函數(shù)及參數(shù)的特征值在語法樹中就是相同的了。即相同函數(shù)及其參數(shù)對應(yīng)的特征值節(jié)點是同一個。這種在語法樹中對特征值進行替換是很簡單就能實現(xiàn)的,如對特征值節(jié)點重新賦值即可。如果存儲單元中沒有該函數(shù)及其參數(shù),則說明該函數(shù)及其參數(shù)是第一次收集,將該函數(shù)及其參數(shù)和對應(yīng)的特征值存儲入存儲單元中。
經(jīng)過第一遍收集后,每一組函數(shù)及其參數(shù)都確定了唯一特征值,相同的函數(shù)及其參數(shù)統(tǒng)一了特征值,后續(xù)的查詢操作完全依靠此特征值即可,效率提升明顯。
進一步,所述步驟406中的批量執(zhí)行的對象是存儲單元中未存儲有對應(yīng)結(jié)果的批量函數(shù),因為存儲單元中存儲有對應(yīng)執(zhí)行結(jié)果的函數(shù)及其參數(shù)和特征值,這些函數(shù)是已經(jīng)被執(zhí)行過的,為了提高效率,節(jié)約計算機資源,已經(jīng)執(zhí)行過的函數(shù)就不再執(zhí)行了,即只執(zhí)行沒有被執(zhí)行過的函數(shù)。
參照圖5,示出了一種電子數(shù)據(jù)表的函數(shù)收集方法的步驟流程圖,它與圖4所示方法的區(qū)別在于,該方法是針對整個電子數(shù)據(jù)表的,該電子數(shù)據(jù)表可以包括很多的單元格公式,所述的電子數(shù)據(jù)表的計算方法可以用于計算整張電子數(shù)據(jù)表的計算,也可以用于完成對其部分區(qū)域的計算。圖4所示實施例具體可以包括以下步驟步驟501、確定電子數(shù)據(jù)表中各單元公式的計算順序。
對于如何確定電子數(shù)據(jù)表中各單元公式的計算順序,本領(lǐng)域技術(shù)人員可以采用各種可行的方法,主要的核心思想是被依賴者先完成計算,如C1=A1+B1,單元格C1依賴單元格A1和B1,則計算順序為A1->B1->C1,保證計算C1之前A1和B1已完成計算。例如,在申請?zhí)枮?00510089360.4的專利公開文件中公開了一種排列單元公式的方法,在此不再予以詳述。
步驟502、將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在語法樹中增加一個特征值節(jié)點。
該函數(shù)及其參數(shù)分別作為此語法樹的節(jié)點,并緊隨該函數(shù)節(jié)點添加一個特征值節(jié)點,作為對應(yīng)此函數(shù)及其參數(shù)的特征值,從而在以后的查詢步驟中,不再以復(fù)雜多樣的函數(shù)及其參數(shù)為對象進行查詢操作,而以對應(yīng)該函數(shù)及其參數(shù)的特征值進行查詢操作,特征值通常比對應(yīng)的函數(shù)及其參數(shù)簡單的多,所以可以提高查詢的效率,節(jié)約計算機資源。
所述語法樹還可以用來確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序。當(dāng)然,本領(lǐng)域的技術(shù)人員知道還可以采用其他的方法來確定公式中各函數(shù)的調(diào)用順序,如采用早期Basic語言逐詞解釋、遞歸調(diào)用執(zhí)行的方式來確定函數(shù)的調(diào)用次序。本發(fā)明優(yōu)選的是采用解析后的語法樹來確定公式中各函數(shù)的調(diào)用順序,這樣可以重復(fù)利用解析后的語法樹,提高函數(shù)收集的效率。
所述語法樹也可以用來確定當(dāng)前單元格公式的批量函數(shù)和非批量函數(shù),顯而易見,本領(lǐng)域的技術(shù)人員也可以采用其他的方式來確定單元格公式中的批量函數(shù)和非批量函數(shù)。如采用函數(shù)名稱標(biāo)識、配置文件、注冊等方式,都可以對單元格公式中的批量函數(shù)和非批量函數(shù)進行識別,對于本發(fā)明來說并不關(guān)鍵,在此就不加以詳述了,本發(fā)明優(yōu)選采用解析后的語法樹來確定單元格公式中的批量函數(shù)和非批量函數(shù),同樣是因為可以重復(fù)利用解析后的語法樹,提高函數(shù)收集的效率。
優(yōu)選的,所述特征值采用一個遞增的整數(shù)值,采用遞增整數(shù)作為特征值是為了保證特征值的唯一性。極端的情況,如果此整數(shù)在大量的解析過程中遞增趨向整數(shù)最大值時則可回頭從整數(shù)最小值開始,顯而易見,正常的電子數(shù)據(jù)表中是不會出現(xiàn)整數(shù)極限個函數(shù)的,所以可以保證此整數(shù)特征值的唯一性。當(dāng)然也可以采用其他的方式達(dá)到特征值唯一性的目的,如采用當(dāng)前的系統(tǒng)時間等作為特征值,但都不如整數(shù)增量特征值簡單高效。本發(fā)明也不對此加以限定。
因為在解析語法樹的過程中很容易就能識別出單元格公式中的批量函數(shù)和非批量函數(shù),非批量函數(shù)在本發(fā)明的優(yōu)選實施例中并不需要進行查詢操作,所以在本發(fā)明進一步優(yōu)選的實施例中不需要對非批量函數(shù)定義特征值,即只在批量函數(shù)節(jié)點后添加一個特征值節(jié)點,這樣可以節(jié)約整數(shù)特征值,節(jié)約了計算機系統(tǒng)資源。
步驟503、根據(jù)解析后的語法樹確定的函數(shù)調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果,該步驟的優(yōu)點之一在于,滿足一些情況下,批量函數(shù)的參數(shù)是非批量函數(shù)的情況。
步驟504、如果是批量函數(shù),則以該函數(shù)及其參數(shù)的特征值到存儲單元中去查詢。
步驟505、如果存儲單元中存儲有該特征值對應(yīng)的結(jié)果值,則直接返回該結(jié)果值。這樣就節(jié)省了一次函數(shù)的調(diào)用過程。特別的,該步驟不再以函數(shù)及其參數(shù)為對象進行查詢操作,而是以一個簡單的特征值進行查詢操作,這在需要進行遠(yuǎn)程查詢操作時效率提高極為明顯。
步驟506、如果存儲單元中沒有存儲該特征值對應(yīng)的結(jié)果值時,則以該函數(shù)及其參數(shù)進行查詢,如果存儲單元中存在相同的函數(shù)及其參數(shù),則說明該函數(shù)及其參數(shù)已經(jīng)被收集過了。以存儲單元中已經(jīng)存儲的相同函數(shù)及其參數(shù)對應(yīng)的特征值替換該查詢函數(shù)及其參數(shù)在語法樹中的特征值,通過該替換步驟后,相同函數(shù)及參數(shù)的特征值在語法樹中就是相同的了。即相同函數(shù)及其參數(shù)對應(yīng)的特征值節(jié)點是同一個。這種在語法樹中對特征值進行替換是很簡單就能實現(xiàn)的,如對特征值節(jié)點重新賦值即可。
如果存儲單元中沒有該函數(shù)及其參數(shù),則說明該函數(shù)及其參數(shù)是第一次收集,將該函數(shù)及其參數(shù)和對應(yīng)的特征值存儲入存儲單元中。并針對該函數(shù)返回一個未定值。單元公式的剩余部分繼續(xù)執(zhí)行。這樣,對有嵌套函數(shù)的單元公式已收集了最里層的函數(shù)。所述的未定值用來表明該函數(shù)及包含該函數(shù)的單元格公式?jīng)]有完成計算,包含未定值的函數(shù)其結(jié)果仍然是未定值,包含未定值函數(shù)的單元格公式結(jié)果也為未定值,當(dāng)然,也可以采用其他的標(biāo)記來進行說明。所述未定值的作用在前面的實施例中已經(jīng)詳細(xì)描述過,在此也不再詳述。
在另一實施例中,在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值。
經(jīng)過第一遍收集后,每一組函數(shù)及其參數(shù)都確定了唯一特征值,相同的函數(shù)及其參數(shù)統(tǒng)一了特征值,后續(xù)的查詢操作完全依靠此特征值即可,效率提升明顯。
這樣就完成了電子數(shù)據(jù)表格中第一個單元格公式函數(shù)的計算、收集,然后判斷是否還有下一個單元格,如果有,則重復(fù)步驟502、503、504、505、506,對下一個單元格公式進行第一次計算、收集。當(dāng)電子數(shù)據(jù)表格中所有單元格公式都完成第一次收集后,進入步驟507。
當(dāng)然,也可以在步驟502中就對該電子數(shù)據(jù)表中的所有待計算單元格公式進行函數(shù)順序確定(例如,統(tǒng)一完成語法樹的解析過程并緩存結(jié)果),則上述重復(fù)循環(huán)的步驟可以僅僅重復(fù)503、504、505、506,對下一個單元格公式進行一次計算、收集。
步驟507、存儲單元將第一遍收集的函數(shù)及其參數(shù)交給執(zhí)行單元批量執(zhí)行,執(zhí)行單元執(zhí)行完畢后將該執(zhí)行結(jié)果返回給存儲單元,存儲單元將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲起來,從而下次查詢該特征時,可以直接返回該特征值的對應(yīng)結(jié)果。
在該步驟中,當(dāng)執(zhí)行單元將函數(shù)執(zhí)行完畢后返回執(zhí)行結(jié)果給存儲單元時,可以以函數(shù)及其參數(shù)為對象進行查詢,從而將執(zhí)行結(jié)果與函數(shù)及其參數(shù)對應(yīng)存儲起來,但本發(fā)明優(yōu)選的是以該函數(shù)及其參數(shù)的特征值為對象進行查詢,從而將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲起來。如果執(zhí)行單元和存儲單元不在同一個系統(tǒng)中時,這樣對查詢效率的提高是非常明顯的。
進一步,批量執(zhí)行的對象是存儲單元中未存儲有對應(yīng)結(jié)果的批量函數(shù),因為存儲單元中存儲有對應(yīng)執(zhí)行結(jié)果的函數(shù)及其參數(shù)和特征值,這些函數(shù)是已經(jīng)被執(zhí)行過的,為了提高效率,節(jié)約計算機資源,已經(jīng)執(zhí)行過的函數(shù)就不再執(zhí)行了,即只執(zhí)行沒有被執(zhí)行過的函數(shù)。
然后重復(fù)步驟504、505、506、507,再次對具有未定值的單元格公式進行函數(shù)的收集及計算。當(dāng)電子數(shù)據(jù)表中不存在具有未定值的單元格公式時,則收集結(jié)束。
進一步,另一種情況,對具有未定值的單元格公式來說,如果沒有緩存語法樹,則需要重新確定函數(shù)的調(diào)用順序和重新確定批量函數(shù)及非批量函數(shù),這時就需要重復(fù)步驟502、503、504、505、506、507,一直重復(fù)上述步驟,直至電子數(shù)據(jù)表中不存在具有未定值的單元格公式,則說明收集結(jié)束,不需要再次重復(fù)。
收集完成后,本領(lǐng)域技術(shù)人員可以應(yīng)用收集結(jié)果進行統(tǒng)計、分析等等操作優(yōu)選的,該實施例還可以包括步驟508、根據(jù)各單元公式中非批量函數(shù)的計算結(jié)果和批量函數(shù)的執(zhí)行結(jié)果完成整個電子數(shù)據(jù)表的計算。
參照圖6,示出了一種電子數(shù)據(jù)表單元格的函數(shù)收集裝置的結(jié)構(gòu)框圖,包括以下部件解析單元601,用于將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在語法樹中增加一個特征值節(jié)點。
該函數(shù)及其參數(shù)分別作為此語法樹的節(jié)點,并緊隨該函數(shù)節(jié)點添加一個特征值節(jié)點,作為對應(yīng)此函數(shù)及其參數(shù)的特征值,從而在以后的查詢步驟中,不再以復(fù)雜多樣的函數(shù)及其參數(shù)為對象進行查詢操作,而以對應(yīng)該函數(shù)及其參數(shù)的特征值進行查詢操作,特征值通常比對應(yīng)的函數(shù)及其參數(shù)簡單的多,所以可以提高查詢的效率,節(jié)約計算機資源。
所述解析單元還可以包括一個確定單元,利用解析單元解析后的所述語法樹還可以用來確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序。當(dāng)然,本領(lǐng)域的技術(shù)人員知道還可以采用其他的方法來確定公式中各函數(shù)的調(diào)用順序,如采用早期Basic語言逐詞解釋、遞歸調(diào)用執(zhí)行的方式來確定函數(shù)的調(diào)用次序,即解析單元和確定單元是獨立的。本發(fā)明優(yōu)選的是采用解析后的語法樹來確定公式中各函數(shù)的調(diào)用順序,這樣可以重復(fù)利用解析后的語法樹,提高函數(shù)收集的效率。
所述確定單元利用解析單元解析后的所述語法樹來確定當(dāng)前單元格公式的批量函數(shù)和非批量函數(shù),顯而易見,本領(lǐng)域的技術(shù)人員也可以采用其他的方式來確定單元格公式中的批量函數(shù)和非批量函數(shù)。如采用函數(shù)名稱標(biāo)識、配置文件、注冊等方式,都可以對單元格公式中的批量函數(shù)和非批量函數(shù)進行識別,對于本發(fā)明來說并不關(guān)鍵,在此就不加以詳述了,即解析單元和確定單元是獨立的。本發(fā)明優(yōu)選采用解析后的語法樹來確定單元格公式中的批量函數(shù)和非批量函數(shù),同樣是因為可以重復(fù)利用解析后的語法樹,提高函數(shù)收集的效率。
優(yōu)選的,所述特征值采用一個遞增的整數(shù)值,采用遞增整數(shù)作為特征值是為了保證特征值的唯一性。極端的情況,如果此整數(shù)在大量的解析過程中遞增趨向整數(shù)最大值時則可回頭從整數(shù)最小值開始,顯而易見,正常的電子數(shù)據(jù)表中是不會出現(xiàn)整數(shù)極限個函數(shù)的,所以可以保證此整數(shù)特征值的唯一性。當(dāng)然也可以采用其他的方式達(dá)到特征值唯一性的目的,如采用當(dāng)前的系統(tǒng)時間等作為特征值,但都不如整數(shù)增量特征值簡單高效。本發(fā)明也不對此加以限定。
因為在解析語法樹的過程中很容易就能識別出單元格公式中的批量函數(shù)和非批量函數(shù),非批量函數(shù)在本發(fā)明的優(yōu)選實施例中并不需要進行查詢操作,所以在本發(fā)明進一步優(yōu)選的實施例中不需要對非批量函數(shù)定義特征值,即只在批量函數(shù)節(jié)點后添加一個特征值節(jié)點,這樣可以節(jié)約整數(shù)特征值,節(jié)約了計算機系統(tǒng)資源。
運算單元602,用于根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值進行查詢。
存儲判斷單元603,用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值。
在另一實施例中,所述存儲判斷單元用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,存在則返回該結(jié)果值;如果不存在對應(yīng)的結(jié)果,則以該函數(shù)及其參數(shù)進行查詢,如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值;如果存儲單元中沒有相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)以及對應(yīng)的特征值存儲入存儲單元中,并針對該函數(shù)返回一未定值。
進一步,還包括一個函數(shù)判斷單元,用于判斷在存儲函數(shù)及參數(shù)前在存儲單元中是否已經(jīng)存在相同的函數(shù)及參數(shù),如果是,則跳過該函數(shù)。存儲單元中有該函數(shù)及其參數(shù),則說明了該函數(shù)及其參數(shù)不是第一次被收集,已經(jīng)被收集過了,不需要再重復(fù)的收集,從而能夠提高效率。
執(zhí)行單元604,用于批量執(zhí)行存儲單元所存儲的批量函數(shù),并返回執(zhí)行結(jié)果給存儲單元。因為存儲單元中存儲有函數(shù)及其參數(shù),這些函數(shù)及其參數(shù)有的已經(jīng)被執(zhí)行,有了對應(yīng)存儲的執(zhí)行結(jié)果,有的還沒有進行執(zhí)行,雖然執(zhí)行單元可以對存儲于存儲單元中的所有函數(shù)及其參數(shù)都執(zhí)行一次,但毫無疑問,這樣會浪費大量的計算機資源,所以優(yōu)選的是只執(zhí)行存儲單元中沒有被執(zhí)行過的函數(shù)及其參數(shù)。
存儲單元605,用于存儲批量函數(shù)及其參數(shù)和特征值以及執(zhí)行單元返回的對應(yīng)執(zhí)行結(jié)果。
未定值判斷單元606,用于判斷是否還存在具有未定值的函數(shù),如果存在,則再次調(diào)用存儲判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
進一步,另一種情況,未定值判斷單元可以重復(fù)調(diào)用運算單元、存儲判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
或者,另一種實施情況,未定值判斷單元還可以重復(fù)調(diào)用確定單元、運算單元、存儲判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
優(yōu)選的,該收集裝置還可以包括單元格計算單元607,用于根據(jù)得到各批量函數(shù)的執(zhí)行結(jié)果,完成當(dāng)前單元格的計算。
參照圖7,示出了一種電子數(shù)據(jù)表的函數(shù)收集裝置的結(jié)構(gòu)框圖,包括以下部件
排列單元701,用于排列電子數(shù)據(jù)表中各單元格公式的計算順序。其核心思想是被依賴者先完成計算,如C1=A1+B1,單元格公式C1依賴單元格公式A1和B1,則計算順序為A1->B1->C1,保證計算C1之前A1和B1已完成計算。
在申請?zhí)枮?00510089360.4的專利公開文件中公開了一種排列單元公式的方法,在此不再予以詳述。
解析單元702,用于將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序以及確定批量函數(shù)和非批量函數(shù),并在解析后的語法樹中的函數(shù)節(jié)點后添加一個特征值節(jié)點,作為此函數(shù)及其參數(shù)的特征值,同圖6所示方法一樣,本實施例所述解析單元還可以包括一個確定單元,所述確定單元也可以與解析單元分別獨立,但本發(fā)明優(yōu)選的是確定單元位于所述解析單元中。
運算單元703,用于根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值進行查詢。
存儲判斷單元704,用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值。
在另一實施例中,所述存儲判斷單元用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,存在則返回該結(jié)果值;如果不存在對應(yīng)的結(jié)果,則以該函數(shù)及其參數(shù)進行查詢,如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值;如果存儲單元中沒有相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)以及對應(yīng)的特征值存儲入存儲單元中,并針對該函數(shù)返回一未定值。
進一步,還包括一個函數(shù)判斷單元,用于判斷在存儲函數(shù)及參數(shù)前在存儲單元中是否已經(jīng)存在相同的函數(shù)及參數(shù),如果是,則跳過該函數(shù)。存儲單元中有該函數(shù)及其參數(shù),則說明了該函數(shù)及其參數(shù)不是第一次被收集,已經(jīng)被收集過了,不需要再重復(fù)的收集,從而能夠提高效率。
存儲單元705,用于存儲批量函數(shù)及其參數(shù)和特征值以及執(zhí)行單元返回的對應(yīng)執(zhí)行結(jié)果。
單元格判斷單元706,用于判斷是否還存在未被執(zhí)行的單元格公式,如果存在,則針對該單元格公式再次調(diào)用解析單元、運算單元和存儲判斷單元;執(zhí)行單元707,用于批量執(zhí)行存儲單元所存儲的批量函數(shù),并返回執(zhí)行結(jié)果給存儲單元。因為存儲單元中存儲有函數(shù)及其參數(shù),這些函數(shù)及其參數(shù)有的已經(jīng)被執(zhí)行,有了對應(yīng)存儲的執(zhí)行結(jié)果,有的還沒有進行執(zhí)行,雖然執(zhí)行單元可以對存儲于存儲單元中的所有函數(shù)及其參數(shù)都執(zhí)行一次,但毫無疑問,這樣會浪費大量的計算機資源,所以優(yōu)選的是只執(zhí)行存儲單元中沒有被執(zhí)行過的函數(shù)及其參數(shù)。
未定值判斷單元708,用于判斷是否還存在具有未定值的單元格公式,如果存在,則再次調(diào)用存儲判斷單元、單元格判斷單元和執(zhí)行單元,直至該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
進一步,另一種情況,未定值判斷單元可以重復(fù)調(diào)用運算單元、存儲判斷單元、單元格判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
或者,另一種實施情況,未定值判斷單元還可以重復(fù)調(diào)用解析單元、運算單元、存儲判斷單元、單元格判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
優(yōu)選的,該收集裝置還可以包括電子數(shù)據(jù)表計算單元709,用于根據(jù)得到的各非批量函數(shù)的計算結(jié)果和各批量函數(shù)的執(zhí)行結(jié)果,完成當(dāng)前電子數(shù)據(jù)表的計算。
圖6、7所示裝置中未詳述的部分可以參見圖1、2、3、4、5所示方法的相關(guān)部分,為了篇幅考慮,在此不再詳述。
以上對本發(fā)明所提供的一種電子數(shù)據(jù)表及單元格的函數(shù)收集方法和裝置,進行了詳細(xì)介紹說明,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種電子數(shù)據(jù)表的函數(shù)收集方法,其特征在于,包括將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定單元格公式中各函數(shù)的調(diào)用順序;以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;根據(jù)所述調(diào)用順序依次執(zhí)行運算,收集符合預(yù)置條件的函數(shù)及其參數(shù);所述收集過程包括依據(jù)特征值查詢是否存儲有相應(yīng)執(zhí)行結(jié)果的步驟;將所收集的函數(shù)及其參數(shù)批量提交,完成批量執(zhí)行;存儲執(zhí)行結(jié)果與對應(yīng)的函數(shù)及其參數(shù)和特征值。
2.如權(quán)利要求1所述的函數(shù)收集方法,其特征在于,所述的存儲步驟為函數(shù)批量執(zhí)行后,以特征值進行定位查詢,將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲。
3.一種電子數(shù)據(jù)表單元格的函數(shù)收集方法,其特征在于,包括a、將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序以及確定批量函數(shù)和非批量函數(shù);以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;b、根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則執(zhí)行步驟c;c、在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;d、批量執(zhí)行所存儲的批量函數(shù),得到對應(yīng)的執(zhí)行結(jié)果,并對應(yīng)存儲該結(jié)果值與函數(shù)及其參數(shù)和特征值至所述存儲單元中;e、針對具有未定值的函數(shù),重復(fù)執(zhí)行步驟d和e,直到該單元格公式中沒有具有未定值的函數(shù)。
4.如權(quán)利要求3所述的函數(shù)收集方法,其特征在于,所述的步驟c為在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,如果所述存儲單元中存在與該特征值對應(yīng)的結(jié)果,則返回該結(jié)果值;否則將該函數(shù)及其參數(shù)以及對應(yīng)的特征值存儲入存儲單元中,并針對該函數(shù)返回一未定值,所述存儲單元用于存儲已收集的函數(shù)及其參數(shù)和對應(yīng)的特征值,以及對應(yīng)的執(zhí)行結(jié)果。
5.如權(quán)利要求3所述的函數(shù)收集方法,其特征在于,所述的步驟c為在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,如果所述存儲單元中存在與該特征值對應(yīng)的結(jié)果,則返回該結(jié)果值,否則以該函數(shù)及其參數(shù)進行查詢;如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值,如果存儲單元中沒有相同的函數(shù)及其參數(shù),存儲該函數(shù)及其參數(shù)以及對應(yīng)的特征值至存儲單元,并針對該函數(shù)返回一未定值,所述存儲單元用于存儲已收集的函數(shù)及其參數(shù)和對應(yīng)的特征值,以及相應(yīng)的執(zhí)行結(jié)果。
6.如權(quán)利要求3、4或5所述的函數(shù)收集方法,其特征在于,步驟d中所述存儲過程為函數(shù)批量執(zhí)行后,以特征值在存儲單元中進行定位查詢,對應(yīng)存儲執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值至存儲單元中。
7.如權(quán)利要求1或3所述的函數(shù)收集方法,其特征在于所述對應(yīng)函數(shù)及其參數(shù)的特征值為一個遞增的整數(shù)值。
8.如權(quán)利要求3所述的函數(shù)收集方法,其特征在于,在步驟e中所述針對具有未定值的函數(shù),重復(fù)執(zhí)行步驟c和步驟d的過程為將全部的具有未定值的函數(shù)重復(fù)執(zhí)行一次后再開始下一循環(huán)。
9.如權(quán)利要求3所述的函數(shù)收集方法,其特征在于,所述的步驟e為針對具有未定值的函數(shù),重復(fù)執(zhí)行步驟b、c和d,直到該單元格公式中沒有具有未定值的函數(shù)。
10.如權(quán)利要求3所述的函數(shù)收集方法,其特征在于,還包括根據(jù)得到的各批量函數(shù)的執(zhí)行結(jié)果,完成單元格的計算。
11.如權(quán)利要求1或3所述的函數(shù)收集方法,其特征在于所述設(shè)置特征值節(jié)點的對應(yīng)函數(shù)節(jié)點是批量函數(shù)節(jié)點。
12.一種電子數(shù)據(jù)表的函數(shù)收集方法,其特征在于,包括a、確定電子數(shù)據(jù)表中各單元格公式的計算順序;b、將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定當(dāng)前單元格公式中各函數(shù)的調(diào)用順序以及確定批量函數(shù)和非批量函數(shù);以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;c、根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則執(zhí)行步驟d;d、在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;e、針對下一單元格,重復(fù)執(zhí)行步驟c和d,直到所需要執(zhí)行的單元格公式都執(zhí)行完畢;f、批量執(zhí)行所存儲的批量函數(shù),得到相應(yīng)的執(zhí)行結(jié)果,并將該結(jié)果值與函數(shù)及其參數(shù)和特征值對應(yīng)存儲至所述存儲單元中;g、針對具有未定值的單元格公式,重復(fù)執(zhí)行步驟d、e和f,直到該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
13.如權(quán)利要求12所述的函數(shù)收集方法,其特征在于,所述的步驟d為在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,如果所述存儲單元中存在與該特征值對應(yīng)的結(jié)果,則返回該結(jié)果值;否則將該函數(shù)及其參數(shù)以及對應(yīng)的特征值存儲入存儲單元中,并針對該函數(shù)返回一未定值;所述存儲單元用于存儲已收集的函數(shù)及其參數(shù)和對應(yīng)的特征值,以及對應(yīng)的執(zhí)行結(jié)果。
14.如權(quán)利要求12所述的函數(shù)收集方法,其特征在于,所述的步驟d為在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值查詢,如果所述存儲單元中存在與該特征值對應(yīng)的結(jié)果,則返回該結(jié)果值;否則以該函數(shù)及其參數(shù)進行查詢,如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值;如果存儲單元中沒有相同的函數(shù)及其參數(shù),存儲該函數(shù)及其參數(shù)以及對應(yīng)的特征值至存儲單元,并針對該函數(shù)返回一未定值;所述存儲單元用于存儲已收集的函數(shù)及其參數(shù)和對應(yīng)的特征值,以及相應(yīng)的執(zhí)行結(jié)果。
15.如權(quán)利要求12所述的函數(shù)收集方法,其特征在于,步驟f中所述存儲過程為函數(shù)批量執(zhí)行后,以特征值在存儲單元中查詢,將執(zhí)行結(jié)果與函數(shù)及其參數(shù)和特征值對應(yīng)存儲在存儲單元中。
16.如權(quán)利要求12所述的函數(shù)收集方法,其特征在于所述對應(yīng)函數(shù)及其參數(shù)的特征值為一個遞增的整數(shù)值。
17.如權(quán)利要求12所述的函數(shù)收集方法,其特征在于,所述的步驟g為針對具有未定值的單元格公式,重復(fù)執(zhí)行步驟c、d、e和f,直到該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
18.如權(quán)利要求12所述的函數(shù)收集方法,其特征在于,所述的步驟f為針對下一單元格公式,重復(fù)執(zhí)行步驟b、c和d,直到所需要執(zhí)行的單元格公式都執(zhí)行完畢。
19.一種電子數(shù)據(jù)表的當(dāng)前單元格的函數(shù)收集裝置,其特征在于,包括解析單元,用于將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在解析后的語法樹中的函數(shù)節(jié)點后添加一個特征值節(jié)點,作為此函數(shù)及其參數(shù)的特征值;確定單元,用于確定單元格公式中各函數(shù)的調(diào)用順序,以及其中的批量函數(shù)和非批量函數(shù);運算單元,用于根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值進行查詢;存儲判斷單元,用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;執(zhí)行單元,用于批量執(zhí)行存儲單元所存儲的批量函數(shù),并返回執(zhí)行結(jié)果給存儲單元;存儲單元,用于存儲批量函數(shù)及其參數(shù)和特征值以及執(zhí)行單元返回的對應(yīng)執(zhí)行結(jié)果;未定值判斷單元,用于判斷是否還存在具有未定值的函數(shù),如果存在,則再次調(diào)用存儲判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
20.如權(quán)利要求19所述的函數(shù)收集裝置,其特征在于,存儲判斷單元的所述判斷收集過程為判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,存在則返回該結(jié)果值,如果不存在對應(yīng)的結(jié)果,則以該函數(shù)及其參數(shù)進行查詢;如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值,如果存儲單元中沒有相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)以及對應(yīng)的特征值存儲入存儲單元中,并針對該函數(shù)返回一未定值。
21.如權(quán)利要求19所述的函數(shù)收集裝置,其特征在于所述未定值判斷單元,用于判斷是否還存在具有未定值的函數(shù),如果存在,則再次調(diào)用運算單元、存儲判斷單元和執(zhí)行單元,直至該單元格公式中沒有具有未定值的函數(shù)。
22.一種電子數(shù)據(jù)表的函數(shù)收集裝置,其特征在于,包括排列單元,用于排列電子數(shù)據(jù)表中各單元格公式的計算順序;解析單元,用于將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,并在解析后的語法樹中的函數(shù)節(jié)點后添加一個特征值節(jié)點,作為此函數(shù)及其參數(shù)的特征值;確定單元,用于確定單元格公式中各函數(shù)的調(diào)用順序,以及其中的批量函數(shù)和非批量函數(shù);運算單元,用于根據(jù)所述調(diào)用順序依次執(zhí)行運算,如果是非批量函數(shù),則計算得到該函數(shù)的計算結(jié)果;如果是批量函數(shù),則在預(yù)置的存儲單元中以該函數(shù)及其參數(shù)的特征值進行查詢;存儲判斷單元,用于判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,收集沒有相應(yīng)結(jié)果值的批量函數(shù),并針對該函數(shù)返回一未定值;單元格判斷單元,用于判斷是否還存在未被執(zhí)行的單元格公式,如果存在,則針對該單元格公式再次調(diào)用運算單元和存儲判斷單元;執(zhí)行單元,用于批量執(zhí)行存儲單元所存儲的批量函數(shù),并返回執(zhí)行結(jié)果給存儲單元;存儲單元,用于存儲批量函數(shù)及其參數(shù)和特征值以及執(zhí)行單元返回的對應(yīng)執(zhí)行結(jié)果;未定值判斷單元,用于判斷是否還存在具有未定值的單元格公式,如果存在,則再次調(diào)用存儲判斷單元、單元格判斷單元和執(zhí)行單元,直至該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
23.如權(quán)利要求22所述的函數(shù)收集裝置,其特征在于,存儲判斷單元的所述判斷收集過程為判斷在存儲單元中查詢的特征值是否存在對應(yīng)的結(jié)果,存在則返回該結(jié)果值,如果不存在對應(yīng)的結(jié)果,則以該函數(shù)及其參數(shù)進行查詢;如果存儲單元中存在相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)在語法樹中的特征值替換成已存儲的相同函數(shù)及其參數(shù)的特征值,如果存儲單元中沒有相同的函數(shù)及其參數(shù),則將該函數(shù)及其參數(shù)以及對應(yīng)的特征值存儲入存儲單元中,并針對該函數(shù)返回一未定值。
24.如權(quán)利要求22所述的函數(shù)收集裝置,其特征在于所述的未定值判斷單元,用于判斷是否還存在具有未定值的單元格公式,如果存在,則再次調(diào)用運算單元、存儲判斷單元、單元格判斷單元和執(zhí)行單元,直至該電子數(shù)據(jù)表中沒有具有未定值的單元格公式。
25.如權(quán)利要求22所述的函數(shù)收集裝置,其特征在于單元格判斷單元,用于判斷是否還存在未被執(zhí)行的單元格公式,如果存在,則針對該單元格公式再次調(diào)用解析單元、確定單元、運算單元和存儲判斷單元。
全文摘要
本發(fā)明提供了一種電子數(shù)據(jù)表的函數(shù)收集方法,包括將包含函數(shù)及其參數(shù)的單元格公式解析成語法樹,確定單元格公式中各函數(shù)的調(diào)用順序;以及,在解析過程中,緊隨函數(shù)節(jié)點設(shè)置一特征值節(jié)點;根據(jù)所述調(diào)用順序依次執(zhí)行運算,收集符合預(yù)置條件的函數(shù)及其參數(shù);所述收集過程包括依據(jù)特征值查詢是否存儲有相應(yīng)執(zhí)行結(jié)果的步驟;將所收集的函數(shù)及其參數(shù)批量提交,完成批量執(zhí)行;存儲執(zhí)行結(jié)果與對應(yīng)的函數(shù)及其參數(shù)和特征值。本發(fā)明將大量相同的批量函數(shù)的特征值都統(tǒng)一為一個特征值,經(jīng)過第一遍查詢后,每一組函數(shù)及其參數(shù)都確定了唯一的特征值,后續(xù)的查詢完全依靠此特征值即可,函數(shù)收集效率的提高更為明顯。
文檔編號G06F17/15GK101055569SQ20071010571
公開日2007年10月17日 申請日期2007年5月25日 優(yōu)先權(quán)日2007年5月25日
發(fā)明者喬昕明 申請人:金蝶軟件(中國)有限公司