本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種確定公式的計算順序的方法及裝置。
背景技術(shù):
表格是一種常用的組織整理數(shù)據(jù)的手段,人們在通信交流、科學(xué)研究以及數(shù)據(jù)分析當(dāng)中廣泛采用各種各樣的表格。為了方便數(shù)據(jù)處理,表格中常常會用到公式來進行數(shù)據(jù)計算。舉例來說,C列的單元格的數(shù)據(jù)是A列的單元格的數(shù)據(jù)與B列的單元格的數(shù)據(jù)之和,為了填充C列的單元格的數(shù)據(jù),可以在C列的單元格中設(shè)置公式一,例如:公式一為C=A+B。類似這種公式經(jīng)常在報表的表格等方面得到應(yīng)用。表格的公式中,也經(jīng)常會存在依賴關(guān)系,以上述的公式為例,如果A列的單元格的數(shù)據(jù)來源于公式二,公式二為A=D-E,那么,要進行公式一的計算就需要先計算公式二,否則,公式一中的A列的單元格的數(shù)據(jù)沒有來源,可以會導(dǎo)致C列的單元格的數(shù)據(jù)錯誤。如何確定表格中公式的計算順序在表格的數(shù)據(jù)處理時十分重要。
現(xiàn)有技術(shù)中,在確定表格中公式的計算順序時,一般是通過人工定義的方式來實現(xiàn)。也就是說,在一個表格中,通過人工來逐個分析表格中的公式,整理出這些公式的計算順序,將計算順序設(shè)置到表格中,使得表格中的每個公式在處理時按照該計算順序進行處理。
通過上述描述可見,現(xiàn)有技術(shù)的確定公式的計算順序的方案是通過人工逐個分析各個公式之間的邏輯順序,進而確定計算順序,這種方案在公式較多的情況下,處理效率較低。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種確定公式的計算順序的方法及裝置,能夠提高處理效率。
一方面,本發(fā)明實施例提供了一種確定公式的計算順序的方法,包括:
確定每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,其中,所述取數(shù)單元格用于存放源數(shù)據(jù),所述結(jié)果單元格用于存放計算結(jié)果;
根據(jù)所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,將所述每個目標(biāo)公式分別轉(zhuǎn)換為公式有向圖;
根據(jù)各個所述目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中相同的單元格,將各個所述公式有向圖合并為至少一個總有向圖;
在每個所述總有向圖中,確定每個所述目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑;
根據(jù)所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑,確定每個所述總有向圖對應(yīng)的各個所述目標(biāo)公式之間的計算順序。
進一步地,所述根據(jù)所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,將所述每個目標(biāo)公式分別轉(zhuǎn)換為公式有向圖,包括:
將所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格作為源節(jié)點;
將所述每個目標(biāo)公式對應(yīng)的結(jié)果單元格作為目的節(jié)點;
根據(jù)所述每個目標(biāo)公式對應(yīng)的源節(jié)點和目的節(jié)點,生成所述每個目標(biāo)公式對應(yīng)的公式有向圖。
進一步地,所述根據(jù)各個所述目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中相同的單元格,將各個所述公式有向圖合并為至少一個總有向圖,包括:
確定所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中的每個單元格對應(yīng)的公式有向圖的節(jié)點;
將各個所述目標(biāo)公式對應(yīng)的各個單元格中相同的單元格所對應(yīng)的節(jié)點確定為相同的節(jié)點;
將各個所述公式有向圖中任意兩個具有相同的節(jié)點的公式有向圖通過所述相同的節(jié)點合并,生成至少一個總有向圖。
進一步地,所述在每個所述總有向圖中,確定每個所述目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑,包括:
在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的節(jié)點作為終止節(jié)點,確定從最底層節(jié)點到每個所述終止節(jié)點的路徑;
確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的路徑中的最長路徑。
進一步地,所述根據(jù)所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑,確定每個所述總有向圖對應(yīng)的各個所述目標(biāo)公式之間的計算順序,包括:
確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑的路徑長度;
在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑的路徑長度從小到大的順序作為各個所述目標(biāo)公式之間的計算的先后順序。
另一方面,本發(fā)明實施例提供了一種確定公式的計算順序的裝置,包括:
單元格確定單元,用于確定每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,其中,所述取數(shù)單元格用于存放源數(shù)據(jù),所述結(jié)果單元格用于存放計算結(jié)果;
轉(zhuǎn)換單元,用于根據(jù)所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,將所述每個目標(biāo)公式分別轉(zhuǎn)換為公式有向圖;
合并單元,用于根據(jù)各個所述目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中相同的單元格,將各個所述公式有向圖合并為至少一個總有向圖;
最長路徑確定單元,用于在每個所述總有向圖中,確定每個所述目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑;
計算順序確定單元,用于根據(jù)所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑,確定每個所述總有向圖對應(yīng)的各個所述目標(biāo)公式之間的計算順序。
進一步地,所述轉(zhuǎn)換單元,用于將所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格作為源節(jié)點,將所述每個目標(biāo)公式對應(yīng)的結(jié)果單元格作為目的節(jié)點,根據(jù)所述每個目標(biāo)公式對應(yīng)的源節(jié)點和目的節(jié)點,生成所述每個目標(biāo)公式對應(yīng)的公式有向圖。
進一步地,所述合并單元,用于確定所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中的每個單元格對應(yīng)的公式有向圖的節(jié)點,將各個所述目標(biāo)公式對應(yīng)的各個單元格中相同的單元格所對應(yīng)的節(jié)點確定為相同的節(jié)點,將各個所述公式有向圖中任意兩個具有相同的節(jié)點的公式有向圖通過所述相同的節(jié)點合并,生成至少一個總有向圖。
進一步地,所述最長路徑確定單元,用于在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的節(jié)點作為終止節(jié)點,確定從最底層節(jié)點到每個所述終止節(jié)點的路徑,確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的路徑中的最長路徑。
進一步地,所述計算順序確定單元,用于確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑的路徑長度,在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑的路徑長度從小到大的順序作為各個所述目標(biāo)公式之間的計算的先后順序。
在本發(fā)明實施例中,將每個目標(biāo)公式轉(zhuǎn)換為公式有向圖,將公式有向圖進行合并,獲得至少一個總有向圖,根據(jù)總有向圖中每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑,確定每個總有向圖對應(yīng)的目標(biāo)公式之間的計算順序,目標(biāo)公式之間的邏輯關(guān)系通過有向圖來表示,無需人工來逐個分析,通過有向圖中的最長路徑來確定目標(biāo)公式之間的計算順序,無需人工來整理和設(shè)置,提高了處理效率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一實施例提供的一種確定公式的計算順序的方法的流程圖;
圖2是本發(fā)明一實施例提供的一種目標(biāo)公式一對應(yīng)的公式有向圖;
圖3是本發(fā)明一實施例提供的一種目標(biāo)公式二對應(yīng)的公式有向圖;
圖4是本發(fā)明一實施例提供的一種總有向圖;
圖5是本發(fā)明一實施例提供的另一種確定公式的計算順序的方法的流程圖;
圖6是本發(fā)明一實施例提供的一種目標(biāo)公式三對應(yīng)的公式有向圖;
圖7是本發(fā)明一實施例提供的一種目標(biāo)公式四對應(yīng)的公式有向圖;
圖8是本發(fā)明一實施例提供的一種目標(biāo)公式五對應(yīng)的公式有向圖;
圖9是本發(fā)明一實施例提供的另一種總有向圖;
圖10是本發(fā)明一實施例提供的一種確定公式的計算順序的裝置的示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例,基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種確定公式的計算順序的方法,該方法可以包括以下步驟:
步驟101:確定每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,其中,所述取數(shù)單元格用于存放源數(shù)據(jù),所述結(jié)果單元格用于存放計算結(jié)果;
步驟102:根據(jù)所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,將所述每個目標(biāo)公式分別轉(zhuǎn)換為公式有向圖;
步驟103:根據(jù)各個所述目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中相同的單元格,將各個所述公式有向圖合并為至少一個總有向圖;
步驟104:在每個所述總有向圖中,確定每個所述目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑;
步驟105:根據(jù)所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑,確定每個所述總有向圖對應(yīng)的各個所述目標(biāo)公式之間的計算順序。
在本發(fā)明實施例中,將每個目標(biāo)公式轉(zhuǎn)換為公式有向圖,將公式有向圖進行合并,獲得至少一個總有向圖,根據(jù)總有向圖中每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑,確定每個總有向圖對應(yīng)的目標(biāo)公式之間的計算順序,目標(biāo)公式之間的邏輯關(guān)系通過有向圖來表示,無需人工來逐個分析,通過有向圖中的最長路徑來確定目標(biāo)公式之間的計算順序,無需人工來整理和設(shè)置,提高了處理效率。
在本發(fā)明一實施例中,所述根據(jù)所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,將所述每個目標(biāo)公式分別轉(zhuǎn)換為公式有向圖,包括:
將所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格作為源節(jié)點;
將所述每個目標(biāo)公式對應(yīng)的結(jié)果單元格作為目的節(jié)點;
根據(jù)所述每個目標(biāo)公式對應(yīng)的源節(jié)點和目的節(jié)點,生成所述每個目標(biāo)公式對應(yīng)的公式有向圖。
在本發(fā)明實施例中,實現(xiàn)了目標(biāo)公式向公式有向圖的轉(zhuǎn)換。在公式有向圖中,包括目的節(jié)點和源節(jié)點,這里將目標(biāo)公式對應(yīng)的取數(shù)單元格作為源節(jié)點,將結(jié)果單元格作為目的節(jié)點,將每個源節(jié)點均與目的節(jié)點相連,每個源節(jié)點均指向目的節(jié)點。舉例來說,目標(biāo)公式一為A1=A2+A3,A1為結(jié)果單元格,A2和A3均為取數(shù)單元格,將單元格A1作為目的節(jié)點A1,將單元格A2和單元格A3分別作為源節(jié)點A21和源節(jié)點A31,將節(jié)點A21和節(jié)點A31均與節(jié)點A1相連,且節(jié)點A21和節(jié)點A31均指向節(jié)點A1,生成目標(biāo)公式一對應(yīng)的公式有向圖,該公式有向圖如圖2所示,圖中包括:節(jié)點A1、節(jié)點A21、節(jié)點A31,這里的節(jié)點包括:目的節(jié)點、源節(jié)點。
在本發(fā)明一實施例中,所述根據(jù)各個所述目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中相同的單元格,將各個所述公式有向圖合并為至少一個總有向圖,包括:
確定所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中的每個單元格對應(yīng)的公式有向圖的節(jié)點;
將各個所述目標(biāo)公式對應(yīng)的各個單元格中相同的單元格所對應(yīng)的節(jié)點確定為相同的節(jié)點;
將各個所述公式有向圖中任意兩個具有相同的節(jié)點的公式有向圖通過所述相同的節(jié)點合并,生成至少一個總有向圖。
在本發(fā)明實施例中,每個目標(biāo)公式可能對應(yīng)多個單元格,這里的單元格包括:取數(shù)單元格、結(jié)果單元格,每個單元格都對應(yīng)公式有向圖中的一個節(jié)點,任意兩個目標(biāo)公式對應(yīng)的單元格中可能存在相同的單元格,這時將相同的單元格對應(yīng)的節(jié)點確定為相同的節(jié)點,也就是說,相同的單元格對應(yīng)的節(jié)點也相同,將相同的節(jié)點合并,生成至少一個總有向圖。舉例來說,目標(biāo)公式二為A2=B2*C2,在該目標(biāo)公式二中,A2為結(jié)果單元格,B2和C2均為取數(shù)單元格,將單元格A2作為目的節(jié)點A22,將單元格B2和單元格C2分別作為源節(jié)點B2、源節(jié)點C2,將節(jié)點B2和節(jié)點C2均與節(jié)點A22相連,且節(jié)點B2和節(jié)點C2均指向節(jié)點A22,生成該目標(biāo)公式二對應(yīng)的公式有向圖,該公式有向圖如圖3所示。圖2中的目標(biāo)公式一和圖3中的目標(biāo)公式二中都有單元格A2,在圖2中,單元格A2對應(yīng)的節(jié)點為節(jié)點A21,在圖3中,單元格A2對應(yīng)的節(jié)點為節(jié)點A22,由于目標(biāo)公式一和目標(biāo)公式二中有相同的單元格A2,則將單元格A2對應(yīng)的節(jié)點A21和A22確定為相同的節(jié)點,節(jié)點A21和節(jié)點A22合并為一個節(jié)點,用節(jié)點A2表示,生成如圖4所示的總有向圖。
在本發(fā)明一實施例中,所述在每個所述總有向圖中,確定每個所述目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑,包括:
在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的節(jié)點作為終止節(jié)點,確定從最底層節(jié)點到每個所述終止節(jié)點的路徑;
確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的路徑中的最長路徑。
總有向圖體現(xiàn)目標(biāo)公式之間的邏輯關(guān)系,當(dāng)總有向圖由至少兩個公式有向圖合并而成時,說明這至少兩個公式有向圖之間存在相同的節(jié)點,也就是說,對應(yīng)的目標(biāo)公式共用同一個單元格中的數(shù)據(jù),以圖4所示的總有向圖為例,圖4所示的總有向圖是由圖2的公式有向圖和圖3的公式有向圖合并而成,圖2和圖3的公式有向圖之間存在相同的節(jié)點A2,對圖2和圖3來說,節(jié)點A2均對應(yīng)單元格A2,對于目標(biāo)公式一來說,單元格A2為取數(shù)單元格,要計算出單元格A1的計算結(jié)果,需要從單元格A2中獲取源數(shù)據(jù);對于目標(biāo)公式二來說,單元格A2為結(jié)果單元格,由單元格B2和C2中的源數(shù)據(jù)計算得出。在圖4的總有向圖中,目標(biāo)公式一的結(jié)果單元格A1的節(jié)點A1為終止節(jié)點,目標(biāo)公式二的結(jié)果單元格A2的節(jié)點A2為終止節(jié)點,最底層節(jié)點包括:節(jié)點B2、節(jié)點C2、節(jié)點A31,這些節(jié)點的低一級沒有其他節(jié)點,所以是最低層節(jié)點。對于節(jié)點A2來說,從最底層節(jié)點到節(jié)點A2的路徑包括:節(jié)點B2→節(jié)點A2、節(jié)點C2→節(jié)點A2,這兩個路徑的均為最長路徑。對于節(jié)點A1來說,從最底層節(jié)點到節(jié)點A1的路徑包括:節(jié)點B2→節(jié)點A2→節(jié)點A1、節(jié)點C2→節(jié)點A2→節(jié)點A1、節(jié)點A31→節(jié)點A1,最長路徑為節(jié)點B2→節(jié)點A2→節(jié)點A1、節(jié)點C2→節(jié)點A2→節(jié)點A1。
在本發(fā)明一實施例中,所述根據(jù)所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑,確定每個所述總有向圖對應(yīng)的各個所述目標(biāo)公式之間的計算順序,包括:
確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑的路徑長度;
在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑的路徑長度從小到大的順序作為各個所述目標(biāo)公式之間的計算的先后順序。
在計算路徑長度時,可以定義任意兩個節(jié)點之間的路徑長度為1,對于每個目標(biāo)公式來說,最長路徑的路徑長度超過1,說明該目標(biāo)公式需要用到其他目標(biāo)公式的計算結(jié)果,也就是,需要用到其他目標(biāo)公式的結(jié)果單元格中的數(shù)據(jù)。在同一個總有向圖中,最長路徑越長,說明該目標(biāo)公式涉及到的其他的目標(biāo)公式越多,那么,該目標(biāo)公式需要等其他的目標(biāo)公式計算完成后,再進行計算。以圖4中的總有向圖為例,圖4中涉及到目標(biāo)公式一和目標(biāo)公式二,目標(biāo)公式一的結(jié)果單元格A1對應(yīng)的最長路徑的路徑長度為2,目標(biāo)公式二的結(jié)果單元格A2對應(yīng)的最長路徑的路徑長度為1,那么,按照從小到大的順序,先計算目標(biāo)公式二,再計算目標(biāo)公式一,通過這兩個目標(biāo)公式的邏輯關(guān)系也可以驗證該計算順序是正確的。
本發(fā)明實施例中的待確定計算順序的目標(biāo)公式可以是在同一個表格中的公式,通過本發(fā)明實施例可以確定在同一個表格中的所有公式之間的計算順序。
如圖5所示,本發(fā)明實施例提供了一種確定公式的計算順序的方法,待確定計算順序的目標(biāo)公式為報表中的公式,該方法可以包括以下步驟:
步驟501:確定每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,其中,取數(shù)單元格用于存放源數(shù)據(jù),結(jié)果單元格用于存放計算結(jié)果。
在表格中,目標(biāo)公式所在的單元格為結(jié)果單元格,目標(biāo)公式中的其他單元格為取數(shù)單元格。
假設(shè)報表中存在兩個目標(biāo)公式分別是目標(biāo)公式一和目標(biāo)公式二。確定目標(biāo)公式一的取數(shù)單元格為單元格A2和單元格A3,結(jié)果單元格為單元格A1。確定目標(biāo)公式二的取數(shù)單元格為單元格B2和單元格C2,結(jié)果單元格為單元格A2。
另外,對于每個目標(biāo)公式來說,可以通過解析目標(biāo)公式中的運算符號來確定取數(shù)單元格和結(jié)果單元格。具體地,當(dāng)?shù)忍杻啥酥幸欢酥挥幸粋€單元格,另一端有至少兩個單元格時,將該一個單元格作為結(jié)果單元格,將該至少兩個單元格作為取數(shù)單元格。
步驟502:將每個目標(biāo)公式對應(yīng)的取數(shù)單元格作為源節(jié)點。
對目標(biāo)公式一來說,將單元格A2和單元格A3分別作為源節(jié)點A21和源節(jié)點A31。
對目標(biāo)公式二來說,將單元格B2和單元格C2分別作為源節(jié)點B2和源節(jié)點C2。
步驟503:將每個目標(biāo)公式對應(yīng)的結(jié)果單元格作為目的節(jié)點。
對目標(biāo)公式一來說,將單元格A1作為目的節(jié)點A1。
對目標(biāo)公式二來說,將單元格A2作為目的節(jié)點A22。
步驟504:根據(jù)每個目標(biāo)公式對應(yīng)的源節(jié)點和目的節(jié)點,生成每個目標(biāo)公式對應(yīng)的公式有向圖。
目標(biāo)公式一對應(yīng)的公式有向圖如圖2所示,目標(biāo)公式二對應(yīng)的公式有向圖如圖3所示。
步驟505:確定每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中的每個單元格對應(yīng)的公式有向圖的節(jié)點。
具體地,確定出目標(biāo)公式一對應(yīng)的單元格A1、A2和A3,分別對應(yīng)圖2中的公式有向圖的節(jié)點A1、節(jié)點A21和節(jié)點A31。
確定出目標(biāo)公式二對應(yīng)的單元格A2、B2和C2,分別對應(yīng)圖3中的公式有向圖的節(jié)點A22、節(jié)點B2和節(jié)點C2。
步驟506:將各個目標(biāo)公式對應(yīng)的各個單元格中相同的單元格所對應(yīng)的節(jié)點確定為相同的節(jié)點。
目標(biāo)公式一和目標(biāo)公式二對應(yīng)的單元格中,相同的單元格為單元格A2,在圖2中,單元格A2對應(yīng)節(jié)點A21,在圖3中,單元格A2對應(yīng)節(jié)點A22,則節(jié)點A21和節(jié)點A22為相同的節(jié)點。
步驟507:將各個公式有向圖中任意兩個具有相同的節(jié)點的公式有向圖通過相同的節(jié)點合并,生成至少一個總有向圖。
將圖2的公式有向圖中的節(jié)點A21和圖3的公式有向圖中的節(jié)點A22合并,生成圖4中的總有向圖,在圖4中,節(jié)點A21和節(jié)點A22均與節(jié)點A2表示。
對于一個表格來說,可能會生成多個總有向圖,只有相互之間存在公式計算上的邏輯關(guān)系的目標(biāo)公式才會對應(yīng)同一個總有向圖,如目標(biāo)公式一和目標(biāo)公式二均對應(yīng)圖4中的總有向圖。如果目標(biāo)公式之間不存在公式計算上的邏輯關(guān)系,則不會出現(xiàn)在同一個總有向圖中,例如:目標(biāo)公式三為B3=B4+B5-B6,單元格B3、B4、B5和B6,均和目標(biāo)公式一和目標(biāo)公式二沒有計算上的邏輯關(guān)系,所以不會出現(xiàn)在同一個總有向圖中。從另一個角度來說,不具有相同的單元格的目標(biāo)公式,沒有相同的節(jié)點,也就不會別合并到同一個總有向圖中,例如:目標(biāo)公式三與目標(biāo)公式一和目標(biāo)公式二均沒有相同的單元格,也就沒有相同的節(jié)點,按照本發(fā)明實施例提供的處理方案,目標(biāo)公式三對應(yīng)的公式有向圖不會在圖4的總有向圖中。根據(jù)目標(biāo)公式一、目標(biāo)公式二和目標(biāo)公式三之間的邏輯關(guān)系,也驗證了本發(fā)明實施例提供的方案的正確性。
另外,在生成總有向圖時,也可以通過以下方式來實現(xiàn):
查詢現(xiàn)有的公式有向圖中是否存在與當(dāng)前目標(biāo)公式對應(yīng)的公式有向圖的節(jié)點相同的節(jié)點,如果是,則將相同的節(jié)點合并,生成新的有向圖,否則,處理下一個目標(biāo)公式,直到所有的目標(biāo)公式處理完畢。
不同的總有向圖之間互相獨立,不同的總有向圖對應(yīng)的目標(biāo)公式之間不存在計算的先后順序,計算順序如何對計算結(jié)果沒有影響。
步驟508:在每個總有向圖中,將每個目標(biāo)公式的結(jié)果單元格對應(yīng)的節(jié)點作為終止節(jié)點,確定從最底層節(jié)點到每個終止節(jié)點的路徑。
具體地,目標(biāo)公式一的結(jié)果單元格A1的節(jié)點A1為終止節(jié)點,目標(biāo)公式二的結(jié)果單元格A2的節(jié)點A2為終止節(jié)點。
節(jié)點A2對應(yīng)的路徑為:節(jié)點B2→節(jié)點A2、節(jié)點C2→節(jié)點A2。
節(jié)點A1對應(yīng)的路徑為:節(jié)點B2→節(jié)點A2→節(jié)點A1、節(jié)點C2→節(jié)點A2→節(jié)點A1、節(jié)點A31→節(jié)點A1。
步驟509:確定每個目標(biāo)公式的結(jié)果單元格對應(yīng)的路徑中的最長路徑。
具體地,目標(biāo)公式一的結(jié)果單元格A1對應(yīng)的路徑中的最長路徑包括:節(jié)點B2→節(jié)點A2→節(jié)點A1、節(jié)點C2→節(jié)點A2→節(jié)點A1。
目標(biāo)公式二的結(jié)果單元格A2對應(yīng)的路徑中的最長路徑包括:節(jié)點B2→節(jié)點A2、節(jié)點C2→節(jié)點A2。
步驟510:確定每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑的路徑長度。
具體地,確定出目標(biāo)公式一的結(jié)果單元格A1對應(yīng)的路徑中的最長路徑的路徑長度為2;確定出目標(biāo)公式二的結(jié)果單元格A2對應(yīng)的路徑中的最長路徑的路徑長度為1。
步驟511:在每個總有向圖中,將每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑的路徑長度從小到大的順序作為各個目標(biāo)公式之間的計算的先后順序。
具體地,目標(biāo)公式一的結(jié)果單元格A1對應(yīng)的最長路徑的路徑長度為2,目標(biāo)公式二的結(jié)果單元格A2對應(yīng)的最長路徑的路徑長度為1,那么,按照從小到大的順序,目標(biāo)公式一和目標(biāo)公式二的計算順序為:先計算目標(biāo)公式二,再計算目標(biāo)公式一。當(dāng)路徑長度相同時,計算順序沒有先后要求。
在本發(fā)明實施例中,目標(biāo)公式指包含從單元格取數(shù)計算的邏輯的公式。
本發(fā)明實施例將每個目標(biāo)公式抽象成有向圖,將目標(biāo)公式的有向圖融合連接,生成至少一個總有向圖,計算出每個目標(biāo)公式所在單元格的最長路徑,依據(jù)最長路徑的大小確定計算順序,本發(fā)明實施例縮短了確定目標(biāo)公式的計算順序的時間,提高了表格編制效率,實用性強。
在本發(fā)明實施例中,假設(shè)圖5所示的報表中包括目標(biāo)公式一、目標(biāo)公式二、目標(biāo)公式三、目標(biāo)公式四和目標(biāo)公式五。其中,目標(biāo)公式三為B3=B4+B5-B6,對應(yīng)的單元格為單元格B3、B4、B5和B6,對應(yīng)的公式有向圖如圖6所示,單元格B3對應(yīng)節(jié)點B31,單元格B4對應(yīng)節(jié)點B4,單元格B5對應(yīng)節(jié)點B5,單元格B6對應(yīng)節(jié)點B6。目標(biāo)公式四為C3=C4+C5-C6,對應(yīng)的單元格為單元格C3、C4、C5、C6,對應(yīng)的公式有向圖如圖7所示,單元格C3對應(yīng)節(jié)點C31,單元格C4對應(yīng)節(jié)點C4,單元格C5對應(yīng)節(jié)點C5,單元格C6對應(yīng)節(jié)點C6。目標(biāo)公式五為A3=B3+C3,對應(yīng)的單元格為單元格A3、B3、C3,對應(yīng)的公式有向圖如圖8所示,單元格A3對應(yīng)節(jié)點A32,單元格B3對應(yīng)節(jié)點B32,單元格C3對應(yīng)節(jié)點C32。目標(biāo)公式一和目標(biāo)公式五對應(yīng)的單元格中,相同的單元格為單元格A3,在圖2中,單元格A3對應(yīng)節(jié)點A31,在圖8中,單元格A3對應(yīng)節(jié)點A32,則節(jié)點A31和節(jié)點A32為相同的節(jié)點,用節(jié)點A3表示。目標(biāo)公式三和目標(biāo)公式五對應(yīng)的單元格中,相同的單元格為單元格B3,在圖6中,單元格B3對應(yīng)節(jié)點B31,在圖8中,單元格B3對應(yīng)節(jié)點B32,則節(jié)點B31和節(jié)點B32為相同的節(jié)點,用節(jié)點B3表示。目標(biāo)公式四和目標(biāo)公式五對應(yīng)的單元格中,相同的單元格為單元格C3,在圖7中,單元格C3對應(yīng)節(jié)點C31,在圖8中,單元格C3對應(yīng)節(jié)點C32,則節(jié)點C31和節(jié)點C32為相同的節(jié)點,用節(jié)點C3表示。將圖2、圖3、圖6、圖7和圖8中的公式有向圖中任意兩個公式有向圖的相同的節(jié)點進行合并,得到如圖9所示的總有向圖。
在圖9所示的總有向圖中,目標(biāo)公式一的結(jié)果單元格A1的節(jié)點A1為終止節(jié)點,目標(biāo)公式二的結(jié)果單元格A2的節(jié)點A2為終止節(jié)點,目標(biāo)公式三的結(jié)果單元格B3的節(jié)點B3為終止節(jié)點,目標(biāo)公式四的結(jié)果單元格C3的節(jié)點C3為終止節(jié)點,目標(biāo)公式五的結(jié)果單元格A3的節(jié)點A3為終止節(jié)點。節(jié)點A1對應(yīng)的最長路徑的路徑長度為3,節(jié)點A2對應(yīng)的最長路徑的路徑長度為1,節(jié)點B3對應(yīng)的最長路徑的路徑長度為1,節(jié)點C3對應(yīng)的最長路徑的路徑長度為1,節(jié)點A3對應(yīng)的最長路徑的路徑長度為2。按照從小到大的順序,最先計算目標(biāo)公式二、目標(biāo)公式三和目標(biāo)公式四,然后,計算目標(biāo)公式五,最后計算目標(biāo)公式一。其中,目標(biāo)公式二、目標(biāo)公式三和目標(biāo)公式四之間沒有先后順序的要求,但是,均在目標(biāo)公式五之前。
如圖10所示,本發(fā)明實施例提供的一種確定公式的計算順序的裝置,包括:
單元格確定單元1001,用于確定每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,其中,所述取數(shù)單元格用于存放源數(shù)據(jù),所述結(jié)果單元格用于存放計算結(jié)果;
轉(zhuǎn)換單元1002,用于根據(jù)所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格,將所述每個目標(biāo)公式分別轉(zhuǎn)換為公式有向圖;
合并單元1003,用于根據(jù)各個所述目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中相同的單元格,將各個所述公式有向圖合并為至少一個總有向圖;
最長路徑確定單元1004,用于在每個所述總有向圖中,確定每個所述目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑;
計算順序確定單元1005,用于根據(jù)所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑,確定每個所述總有向圖對應(yīng)的各個所述目標(biāo)公式之間的計算順序。
在本發(fā)明一實施例中,所述轉(zhuǎn)換單元,用于將所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格作為源節(jié)點,將所述每個目標(biāo)公式對應(yīng)的結(jié)果單元格作為目的節(jié)點,根據(jù)所述每個目標(biāo)公式對應(yīng)的源節(jié)點和目的節(jié)點,生成所述每個目標(biāo)公式對應(yīng)的公式有向圖。
在本發(fā)明一實施例中,所述合并單元,用于確定所述每個目標(biāo)公式對應(yīng)的取數(shù)單元格和結(jié)果單元格中的每個單元格對應(yīng)的公式有向圖的節(jié)點,將各個所述目標(biāo)公式對應(yīng)的各個單元格中相同的單元格所對應(yīng)的節(jié)點確定為相同的節(jié)點,將各個所述公式有向圖中任意兩個具有相同的節(jié)點的公式有向圖通過所述相同的節(jié)點合并,生成至少一個總有向圖。
在本發(fā)明一實施例中,所述最長路徑確定單元,用于在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的節(jié)點作為終止節(jié)點,確定從最底層節(jié)點到每個所述終止節(jié)點的路徑,確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的路徑中的最長路徑。
在本發(fā)明一實施例中,所述計算順序確定單元,用于確定所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的所述最長路徑的路徑長度,在每個所述總有向圖中,將所述每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑的路徑長度從小到大的順序作為各個所述目標(biāo)公式之間的計算的先后順序。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
本發(fā)明各個實施例至少具有如下有益效果:
1、在本發(fā)明實施例中,將每個目標(biāo)公式轉(zhuǎn)換為公式有向圖,將公式有向圖進行合并,獲得至少一個總有向圖,根據(jù)總有向圖中每個目標(biāo)公式的結(jié)果單元格對應(yīng)的最長路徑,確定每個總有向圖對應(yīng)的目標(biāo)公式之間的計算順序,目標(biāo)公式之間的邏輯關(guān)系通過有向圖來表示,無需人工來逐個分析,通過有向圖中的最長路徑來確定目標(biāo)公式之間的計算順序,無需人工來整理和設(shè)置,提高了處理效率。
2、在本發(fā)明實施例中,將每個目標(biāo)公式抽象成公式有向圖,將目標(biāo)公式的公式有向圖融合連接,生成至少一個總有向圖,計算出每個目標(biāo)公式所在單元格的最長路徑,依據(jù)最長路徑的大小確定計算順序,本發(fā)明實施例縮短了確定目標(biāo)公式的計算順序的時間,提高了表格編制效率,實用性強。
需要說明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個〃·····”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲在計算機可讀取的存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)中。
最后需要說明的是:以上所述僅為本發(fā)明的較佳實施例,僅用于說明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。