本申請請求于2014年12月4日提交的美國申請序列號14/560,954的優(yōu)先權(quán),其全部內(nèi)容通過引用并入本文中。
技術(shù)領(lǐng)域
一般而言,本公開涉及在協(xié)作電子表格中執(zhí)行拷貝粘貼操作。
背景技術(shù):
電子表格有益于操縱數(shù)據(jù)的結(jié)構(gòu)化數(shù)組。特別地,電子表格能夠?qū)@樣的數(shù)據(jù)數(shù)組迅速執(zhí)行許多重復(fù)計算。協(xié)作電子表格有益于允許多個用戶同時地在經(jīng)由網(wǎng)絡(luò)通信的多個設(shè)備上編輯文檔。在協(xié)作電子表格中,多個用戶能夠同時編輯電子表格的同一部分。這種狀況可能導(dǎo)致一個用戶作出的編輯與另一個用戶作出的編輯沖突或者交叉。解決這種狀況的一種方式是,針對每個設(shè)備,將網(wǎng)絡(luò)上每次編輯產(chǎn)生的數(shù)據(jù)經(jīng)由網(wǎng)絡(luò)傳送至其他設(shè)備和服務(wù)器。然而,這會導(dǎo)致跨網(wǎng)絡(luò)傳遞大量數(shù)據(jù),尤其是針對拷貝粘貼操作而言。
技術(shù)實現(xiàn)要素:
因此,本文公開了用于解決協(xié)作電子表格中的交叉編輯的系統(tǒng)和方法。在某些方面中,本文所述的系統(tǒng)和方法涉及編輯托管在服務(wù)器上的協(xié)作電子表格。使用處理器并且在用戶設(shè)備上顯示所述協(xié)作電子表格。可以基于存儲在所述用戶設(shè)備上的第一模型來顯示所述協(xié)作電子表格??梢栽谒鎏幚砥魈幉⑶覐挠脩艚邮盏谝惠斎?。所述第一輸入可以包括所述電子表格的源范圍、所述電子表格的目的地范圍、以及用以將內(nèi)容從所述源范圍拷貝到所述目的地范圍的指令??梢栽谒鎏幚砥魈幉⑶覐乃龇?wù)器接收第二輸入。所述第二輸入可以包括用以修改所述電子表格的一部分的輸入。所述第二輸入可以包括用以通過影響所述源范圍以及所述目的地范圍中的至少一個中的內(nèi)容的方式修改所述電子表格的指令。可以在所述處理器處變換所述第一輸入。可以基于所述第二輸入來變換所述第一輸入以獲得經(jīng)變換的第一輸入。可以使用所述處理器來修改所述模型。可以基于所述第二輸入來修改所述第一模型以獲得第二模型。可以使用所述處理器來進(jìn)一步修改所述第二模型。可以基于所述經(jīng)變換的第一輸入來修改所述第二模型以獲得第三模型??梢允褂盟鎏幚砥鞑⑶以谒鲇脩粼O(shè)備上顯示所述協(xié)作電子表格。可以基于所述第三模型來顯示所述協(xié)作電子表格。
可以將存儲在所述用戶設(shè)備上的所述第一輸入以及對應(yīng)于所述第一模型的第一修訂號傳送至所述服務(wù)器。確定是否變換所述第一輸入可以是基于是否從所述服務(wù)器接收到確認(rèn)。所述確認(rèn)可以與所述第一輸入相關(guān)聯(lián)并且可以包括大于所述第一修訂號的第二修訂號。是否接收到確認(rèn)可以確定是否進(jìn)一步修改所述第二模型。可以將存儲在所述用戶設(shè)備上的所述經(jīng)變換的第一輸入以及對應(yīng)于所述第二模型的修訂號傳送至所述服務(wù)器。所述目的地范圍可以大于所述源范圍。用以拷貝內(nèi)容的指令可以包括用以將內(nèi)容從所述源范圍拼貼至所述目的地范圍中的指令。
在一些方面中,可以在所述服務(wù)器處從第一用戶設(shè)備接收用以修改所述電子表格的第一輸入。可以在所述服務(wù)器處從第二用戶設(shè)備接收第二輸入。所述第二輸入可以包括所述電子表格的源范圍、所述電子表格的目的地范圍、以及用以將內(nèi)容從所述源范圍拷貝至所述目的地范圍拷貝的指令。所述第一輸入可以包括用以通過影響所述源范圍和所述目的地范圍中的至少一個的方式修改所述電子表格的指令??梢曰谒龅谝惠斎雭碜儞Q所述第二輸入以獲得經(jīng)變換的第二輸入??梢詫⑺鼋?jīng)變換的第二輸入從所述服務(wù)器傳送至所述第一用戶設(shè)備。
確定是否變換所述第二輸入可以是基于將與所述第一輸入相關(guān)聯(lián)的第一修訂號同與所述第二輸入相關(guān)聯(lián)的第二修訂號相比較??梢曰谒龅谝惠斎雭硇薷拇鎯υ谒龇?wù)器上的所述電子表格的模型以獲得第一修改模型??梢曰谒鼋?jīng)變換的第二輸入來進(jìn)一步修改所述第一修改模型以獲得第二修改模型。
可以將對所述第一輸入的確認(rèn)以及第一修訂號從所述服務(wù)器傳送至所述第一用戶設(shè)備。可以將所述第一輸入以及所述第一修訂號從所述服務(wù)器傳送至所述第二用戶設(shè)備。可以將所述經(jīng)變換的第二輸入以及大于所述第一修訂號的第二修訂號從所述服務(wù)器傳送至所述第一用戶設(shè)備??梢詫λ龅诙斎氲拇_認(rèn)以及所述第二修訂號從所述服務(wù)器傳送至所述第二用戶設(shè)備。
附圖說明
圖1是根據(jù)說明性實施方式的云計算服務(wù)的框圖;
圖2是根據(jù)說明性實施方式的與服務(wù)器通信的兩個客戶端設(shè)備的框圖;
圖3A、3B、3C和3D描繪了示出根據(jù)說明性實施方式的使用與服務(wù)器通信的兩個客戶端設(shè)備對協(xié)作文檔作出編輯的泳道圖;
圖4是根據(jù)說明性實施方式的由客戶端設(shè)備在協(xié)調(diào)用戶更改與從服務(wù)器所接收的更改時所執(zhí)行的方法的流程圖;
圖5是根據(jù)說明性實施方式的由服務(wù)器在協(xié)調(diào)從多個客戶端設(shè)備所接收的更改時所執(zhí)行的方法的流程圖;
圖6是根據(jù)說明性實施方式的由服務(wù)器或者客戶端設(shè)備在將一個更改針對另一個進(jìn)行變換時所執(zhí)行的方法的流程圖;
圖7是對根據(jù)說明性實施方式的行插入更改交叉拷貝粘貼更改的說明;
圖8是對根據(jù)說明性實施方式的行刪除更改交叉拷貝粘貼更改的說明;
圖9是對根據(jù)說明性實施方式的設(shè)置單元格更改交叉拷貝粘貼的源范圍更改的說明;
圖10是對根據(jù)說明性實施方式的設(shè)置單元格更改交叉拷貝粘貼的目的地范圍更改的說明;
圖11是對根據(jù)說明性實施方式的拼貼式拷貝粘貼操作的說明;以及
圖12是根據(jù)說明性實施方式的用于執(zhí)行本文所述過程中的任何一個的計算設(shè)備的框圖。
具體實施方式
為提供對本公開的全面理解,現(xiàn)將對某些說明性實施例進(jìn)行描述,包括用于在協(xié)作電子表格中有效地執(zhí)行拷貝粘貼操作的系統(tǒng)和方法。然而,本領(lǐng)域普通技術(shù)人員將理解的是,本文所述的系統(tǒng)和方法可以被調(diào)整和修改為適用于所處理的應(yīng)用,并且本文所述的系統(tǒng)和方法可以被用于其他合適的應(yīng)用中,并且這樣的其他補(bǔ)充和修改不會脫離其范圍。一般地,本文所述的計算機(jī)化系統(tǒng)可以包括一個或多個組件,其包括處理設(shè)備或多個設(shè)備,諸如計算機(jī)、微處理器、邏輯設(shè)備或者配置有用于執(zhí)行本文所述的計算機(jī)化方法中的一個或多個的硬件、固件和軟件的其他設(shè)備或處理器。
如本文所用,電子表格是具有包含在單元格中的數(shù)據(jù)的電子文檔。單元格被布置成陣列,通常是矩形陣列。每個單元格能夠通過一個或多個索引來識別。在矩形陣列中,這些索引能夠是行和列索引。通常,在電子表格用戶界面中,行索引由阿拉伯?dāng)?shù)字表示,并且列索引由英文字母表示。雖然這是常用的實施方式,但諸如使用數(shù)字對或者字母對的其他實施方式也可行。可以使用諸如羅馬系統(tǒng)的其他數(shù)字系統(tǒng)以及諸如希臘字母的其他字母。實現(xiàn)電子表格的軟件可以通過不同于用戶界面中所顯示的格式來存儲索引。例如,雖然單元格可以具有用戶界面的索引“B4”,但軟件可以在內(nèi)部將單元格的索引存儲為有序行列對(4,2),表示第四行和第二列。
在用戶界面中,每個單元格中所包含的數(shù)據(jù)可以是數(shù)字、文本串、公式或者其組合的形式。軟件可以存儲文本串、整數(shù)、浮點數(shù)或者其組合形式的全部數(shù)據(jù)。如果電子表格的單元格B4包含文本串“Hello World(你好世界)”(在此,該串不包括引號),則字符“W”可以通過索引集合(4,2,7)來引用,指示該字符是在電子表格的第四行和第二列中的單元格中所包含的串中的第七個字符。
索引的其他表示和排序也可行。例如,索引集合可以從0而非1開始編號,或者單元格內(nèi)的位置可以在行和列索引之前被定位。在一些示例中,整數(shù)和浮點數(shù)僅為行和列索引所引用并且不為單元格內(nèi)的位置所引用。在單個電子表格中可以包含相異類型的數(shù)據(jù),使得電子表格的一個單元格包含文本串,電子表格的一個單元格包含整數(shù),并且電子表格的另一個單元格包含浮點數(shù)。公式可以被存儲為文本串并且根據(jù)特定規(guī)則來處理。例如,公式“=A2+B2”在被輸入單元格B4內(nèi)時指令應(yīng)用在單元格B4中顯示單元格A2和B2的內(nèi)容之和。
如本文所用,在電子表格中的拷貝粘貼操作是由用戶發(fā)起的、從源范圍中的一個或多個單元格向目的地范圍中的一個或多個單元格拷貝數(shù)據(jù)的操作。所述操作可以是文字復(fù)制,并且目的地范圍中的單元格可以在操作之后包含與源范圍中的對應(yīng)單元格相同的內(nèi)容。拷貝和粘貼的公式可以包括絕對或相對引用,如參照圖6予以更加詳細(xì)的描述。拷貝-粘貼操作可以包括拼貼,如參照圖11予以更加詳細(xì)的描述。在拼貼式拷貝-粘貼操作中,源范圍和目的地范圍的大小并不相同。
協(xié)作電子表格可以由基于云的文檔存儲系統(tǒng)的多個用戶來編輯。當(dāng)多個用戶編輯電子表格的同一部分時,可能出現(xiàn)問題。當(dāng)發(fā)生這種情況時,正在編輯的單元格的范圍可能交叉,導(dǎo)致關(guān)于每個編輯引用哪些單元格的潛在模糊性。特別地,在一個設(shè)備處作出的拷貝-粘貼更改可以與在另一個設(shè)備處作出的另一個更改交叉。例如,可能在拷貝-粘貼操作的目的地范圍相交的位置插入行。當(dāng)發(fā)生這種情況時,對單元格索引的更改能夠產(chǎn)生關(guān)于哪些單元格應(yīng)接受粘貼數(shù)據(jù)的潛在模糊性。
結(jié)合協(xié)作邏輯實現(xiàn)的操作變換能夠解決這種潛在模糊性。通過這種方式,每個設(shè)備都能夠通過交叉更改來變換拷貝-粘貼更改,使得拷貝-粘貼更改操作于經(jīng)調(diào)整的單元格范圍。如果未得到有效處理,實現(xiàn)這一變換會在設(shè)備之間產(chǎn)生大量的網(wǎng)絡(luò)流量。例如,每個設(shè)備作為發(fā)送粘貼命令的一部分,可以將全部待粘貼的數(shù)據(jù)發(fā)送至網(wǎng)絡(luò)上的其他設(shè)備。雖然容易實現(xiàn),但如果粘貼的目的地范圍很大,這就會造成沉重的網(wǎng)絡(luò)流量。然而,在一些實施方式中,通過僅發(fā)送可以包括源范圍和目的地范圍中的單元格的索引的拷貝-粘貼指令,能夠大幅縮減這種流量。每個設(shè)備以及服務(wù)器能夠再根據(jù)協(xié)作邏輯而對拷貝-粘貼指令執(zhí)行操作變換。
通過這種方式執(zhí)行拷貝-粘貼操作十分有益,原因是在網(wǎng)絡(luò)上傳送的數(shù)據(jù)量同效率較低的拷貝-粘貼操作相比有所減少。大量的數(shù)據(jù)轉(zhuǎn)移會使協(xié)作電子表格因設(shè)備的應(yīng)用和網(wǎng)絡(luò)連接減速而無法有效地使用。通過有效地對拷貝-粘貼操作執(zhí)行操作變換,能夠?qū)崿F(xiàn)電子表格復(fù)雜操作的益處,同時還實現(xiàn)協(xié)作文檔的益處。
圖1示出客戶端-服務(wù)器系統(tǒng)100,其包括云計算服務(wù)102以及數(shù)個客戶端設(shè)備104a至104d(統(tǒng)稱為客戶端設(shè)備104)。云計算服務(wù)102提供用于客戶端設(shè)備104的集合的云計算服務(wù)。特別地,云計算服務(wù)102可以包括存儲可供客戶端設(shè)備104a至104d訪問的數(shù)個文件的一個或多個服務(wù)器,所述文件諸如示例性的協(xié)作電子表格106。在客戶端設(shè)備104處的用戶可以創(chuàng)建、編輯、拷貝、共享以及刪除存儲在云計算服務(wù)102上的文件。例如,客戶端設(shè)備104可以各自使用web瀏覽器來同時訪問云計算服務(wù)102上的電子表格106。云計算服務(wù)102向每個客戶端設(shè)備104提供電子表格106的本地副本,客戶端設(shè)備104上的用戶可以再查看和編輯該本地副本。云計算服務(wù)102可以使電子表格106的本地副本彼此同步并且與存儲在云計算服務(wù)102中的服務(wù)器上的電子表格106的副本同步。在一個示例中,由客戶端設(shè)備104a作出的、在本文中可以稱作更改的編輯被自動地發(fā)送至云計算服務(wù)102并且被傳送至其他客戶端設(shè)備104b、104c和104d。通過這種方式,由一個協(xié)作者作出的更改可以立刻被其他協(xié)作者看到。
如本文所用,文件包括存儲在存儲媒介上的一組數(shù)字編碼位。云文件包括存儲在服務(wù)器上并且可經(jīng)由網(wǎng)絡(luò)訪問的文件。本地文件包括存儲在用戶的本地設(shè)備上的文件??蛻舳嗽O(shè)備包括與客戶端-服務(wù)器關(guān)系中的服務(wù)器通信的本地設(shè)備。如本文所用,客戶端設(shè)備與用戶設(shè)備以及本地設(shè)備同步,除非上下文另作說明。如本文所用,文檔能夠與多個文件相關(guān)聯(lián)。例如,云文件可以是存儲在服務(wù)器上的文檔的副本,并且本地文件可以是存儲在本地設(shè)備上的相同文檔的副本。一般地,同一文檔的多個副本可以是相同的,但如果由一個協(xié)作者作出的更改尚未被傳送至其他協(xié)作者,則它們可能有所不同。當(dāng)網(wǎng)絡(luò)連接很慢或者間歇時,可能發(fā)生這種狀況。如果副本被存儲在不同類型的設(shè)備上,諸如具有不同操作系統(tǒng)的設(shè)備,同一文檔的多個副本也可以略有不同。在此情形下,不同的副本可以具有略有不同的元數(shù)據(jù),或者可能以不同方式來編碼。例如,一個副本可能以大端格式來編碼,并且另一個副本可能以小端格式來編碼。只要顯示給用戶的信息內(nèi)容在副本之間相同,這些格式差異便能夠跨多個文件存在,這些文件是同一文檔的副本。本地設(shè)備可以讀取文件(存儲在非易失性存儲器中)的內(nèi)容并且存儲表示工作存儲器中的文件的模型。工作存儲器可以是易失性的(例如,RAM或者等價物)。
客戶端設(shè)備104可以包括桌面型計算機(jī)、膝上型計算機(jī)、平板型計算機(jī)、智能電話、移動電子設(shè)備、或者可以通過網(wǎng)絡(luò)連接至云計算服務(wù)102的任何其他設(shè)備的任何組合。在系統(tǒng)100中僅示出四個客戶端設(shè)備104,但應(yīng)理解的是,任何數(shù)目的任何類型的客戶端設(shè)備104可以被配置成與云計算服務(wù)102通信。系統(tǒng)100的云計算服務(wù)102以及客戶端設(shè)備104可以通過諸如互聯(lián)網(wǎng)的遠(yuǎn)程網(wǎng)絡(luò)來連接。通過局域網(wǎng)、廣域網(wǎng)、以太網(wǎng)、光纖網(wǎng)絡(luò)、無線網(wǎng)絡(luò)、蜂窩網(wǎng)絡(luò)、交互式電視網(wǎng)絡(luò)、電話網(wǎng)絡(luò)、無線數(shù)據(jù)傳輸系統(tǒng)、雙向電纜系統(tǒng)、定制的私用或公用計算機(jī)網(wǎng)絡(luò)、交互式自助終端網(wǎng)絡(luò)、直接鏈路、衛(wèi)星網(wǎng)絡(luò)、和/或任何其他有線或無線連接,可以促進(jìn)網(wǎng)絡(luò)連接。
圖2更加詳細(xì)地示出客戶端-服務(wù)器系統(tǒng)200,其可以被使用于實現(xiàn)對協(xié)作電子表格的有效拷貝-粘貼操作。系統(tǒng)200包括服務(wù)器202以及通過網(wǎng)絡(luò)208連接的兩個客戶端設(shè)備204a和204b。如圖2所示,客戶端設(shè)備204a和204b相同并且具有相同的組件。關(guān)于客戶端設(shè)備204所述的部分可應(yīng)用于客戶端設(shè)備204b。如圖所示,系統(tǒng)200包括一個服務(wù)器以及兩個客戶端設(shè)備,但一般而言,系統(tǒng)200可以包括多于一個的服務(wù)器以及任何數(shù)目的客戶端設(shè)備??蛻舳嗽O(shè)備204a包括處理器212a、存儲文件224a的數(shù)據(jù)庫222a、網(wǎng)絡(luò)接口226a、顯示器228a、以及應(yīng)用214a。
應(yīng)用214a被配置成使用模型-視圖-控制器范式來顯示、渲染和編輯文檔。應(yīng)用214a包括模型組件216a、控制器組件218a、以及視圖組件220a。模型組件216a是文檔的表示并且通常具有層級性。視圖組件220a被配置成解釋或渲染以便顯示模型組件216a??刂破鹘M件218a被配置成從用戶或者從諸如網(wǎng)絡(luò)源的另一來源接收輸入,并且更新模型。模型組件216a在其已被更新時可以向視圖組件220a以及控制器組件218a通知已發(fā)生更新。在一些示例中,模型組件216a是無源的,并且不提供這樣的更新。在這些示例中,視圖組件220a以及控制器組件218a將針對更新輪詢模型組件216a。模型216a可以是層級模型,諸如文檔模型(DOM)。在DOM中,數(shù)據(jù)以層級方式被布置于節(jié)點中,使得每個節(jié)點具有父節(jié)點和/或一個或多個子節(jié)點。節(jié)點可以表示文檔、段落、語句、詞或者字母,并且節(jié)點也可以包括對部分文檔的格式化。當(dāng)文檔是電子表格時,節(jié)點也可以包含電子表格的單元格或者指示單元格的部分內(nèi)容的文本串。
在圖2中對應(yīng)用214a的描繪是說明性的,并且應(yīng)用214a的一個或多個組件可以駐存于客戶端設(shè)備204a的其他部分上。例如,模型組件216a的一些或全部可以被存儲于數(shù)據(jù)庫222a中,諸如文件224a內(nèi)。另外,用于214a的代碼可以被存儲于數(shù)據(jù)庫222a上并且由處理器212a來執(zhí)行。在圖2中所示的示例中,應(yīng)用214a的視圖組件220a正在顯示器228a上渲染電子表格文檔?;阡秩荆幚砥髡诖鎯υ谟脩粼O(shè)備204a上的模型216a來顯示協(xié)作電子表格。如圖2所示,應(yīng)用214a駐存于客戶端設(shè)備204a上。在一些示例中,應(yīng)用214a的一部分或全部可以駐存于服務(wù)器202上。在一些示例中,應(yīng)用214a可以在瘦客戶端環(huán)境下實現(xiàn),其中用于應(yīng)用214a的代碼中的大多數(shù)駐存于服務(wù)器上。在一些示例中,用于應(yīng)用214a的代碼可以按需經(jīng)由網(wǎng)絡(luò)208從服務(wù)器202傳遞至本地設(shè)備204a。
網(wǎng)絡(luò)接口226a可以包括配置成與網(wǎng)絡(luò)208通信的硬件和/或軟件。用于網(wǎng)絡(luò)接口226a的代碼可以由處理器212a運行,或者替選地,可以在網(wǎng)絡(luò)接口226a本身所包含的硬件上實現(xiàn)。網(wǎng)絡(luò)208可以是諸如因特網(wǎng)、萬維網(wǎng)、局域網(wǎng)、廣域網(wǎng)、蜂窩網(wǎng)絡(luò)或者如本文所述的其他類似網(wǎng)絡(luò)的網(wǎng)絡(luò)。客戶端設(shè)備204a也可以包括一個或多個用戶輸入設(shè)備,諸如鼠標(biāo)或其他指示設(shè)備以及鍵盤??蛻舳嗽O(shè)備204b包括與客戶端設(shè)備204a相似的組件和特征。
服務(wù)器202包括處理器230、應(yīng)用234、以及包含文件232的數(shù)據(jù)庫210。在一些示例中,服務(wù)器202可以實現(xiàn)云計算服務(wù),諸如圖1中所示的服務(wù)102。如圖2所示,數(shù)據(jù)庫220存儲文件232,但一般可以存儲任何數(shù)目的文件。這些文件中的一些或者全部可以對云計算服務(wù)的用戶是可用的。處理器230運行存儲在服務(wù)器202上的應(yīng)用,諸如應(yīng)用234。用于應(yīng)用234的代碼也可以被存儲在數(shù)據(jù)庫210中。應(yīng)用234可以是云計算服務(wù)的一部分。作為云計算服務(wù)的一部分,應(yīng)用234可以包含協(xié)作邏輯,其協(xié)調(diào)對存儲在云計算服務(wù)上的文檔作出的編輯。當(dāng)實現(xiàn)協(xié)作邏輯時,應(yīng)用234可以保存對存儲在云計算服務(wù)上的文檔的更改的列表,并且可以保存文檔的主模型。為進(jìn)一步實現(xiàn)協(xié)作邏輯,應(yīng)用234可以接收例如由設(shè)備204a的用戶作出的編輯并且將那些編輯發(fā)送至協(xié)作文檔服務(wù)的其他用戶,諸如設(shè)備204b的用戶。通過這種方式,應(yīng)用234協(xié)調(diào)由多個用戶作出的編輯,使得多個用戶可以查看相似或大體上相同的文檔模型的渲染。在圖2所示的示例中,設(shè)備204a和204b的用戶都正在查看相同版本的協(xié)作電子表格。由設(shè)備204a的用戶作出的更改可以通過網(wǎng)絡(luò)208以及服務(wù)器202而被發(fā)送至設(shè)備204b以便顯示于顯示器228b上。這會使得模型216b用由設(shè)備204a的用戶作出的更改來更新。通過經(jīng)由網(wǎng)絡(luò)208與服務(wù)器202通信,設(shè)備204a和204b能夠顯示相似或大體上相同版本的協(xié)作電子表格。在一些示例中,客戶端設(shè)備可以執(zhí)行由服務(wù)器執(zhí)行的本文所述的一個或多個功能。在這些示例中,服務(wù)器可以不起作用或者僅起附帶作用。
圖3A、3B、3C和3D描繪了示出如何經(jīng)由服務(wù)器使用協(xié)調(diào)邏輯來協(xié)調(diào)由兩個用戶(即Alice和Bob)作出的更改的泳道圖。圖3A至3D描繪出三個道301、303和305,每個道包含事件或者機(jī)器的狀態(tài)。第一道301包括狀態(tài)302、312、324、338和348以及事件308和334,其中每個都發(fā)生在由名為Alice的用戶操作的設(shè)備處。第二道303包括狀態(tài)304、318、326、328和344以及事件340,其中每個都發(fā)生在服務(wù)器處。第三道305包括狀態(tài)306、314、320、336和352以及事件310和350,其中每個都發(fā)生在由名為Bob的用戶操作的設(shè)備處。圖3A至3D也描繪出消息316、322、332和346以及確認(rèn)330和342,其中每個都從一個設(shè)備(或者服務(wù)器)中被傳送并且在另一個設(shè)備(或者服務(wù)器)處被接收。Alice的設(shè)備、Bob的設(shè)備以及服務(wù)器可以分別對應(yīng)于圖2中所示的客戶端設(shè)備204a、客戶端設(shè)備204b以及服務(wù)器202。參照圖3至11,術(shù)語“客戶端設(shè)備”、“服務(wù)器”、“Alice”和“Bob”旨在指代相應(yīng)的機(jī)器,但也包括其上運行的應(yīng)用以及它們的組件,諸如處理器。因此,在本文中例如描述采取動作的機(jī)器的用語可以是對機(jī)器運行應(yīng)用和采取動作的處理器的簡述。除非上下文另作說明,否則本文所用的術(shù)語“設(shè)備”能夠包括服務(wù)器或者其他計算系統(tǒng)。
在圖3A至3D中,道301、303和305中的每一個都包含其自有的垂直取向的時間軸,在稍后發(fā)生的事件或狀態(tài)上方示出早前發(fā)生的事件或狀態(tài)。例如,如道301中所示,狀態(tài)302發(fā)生在事件308之前。每個道提供該道內(nèi)的事件的相對時序的指示。通過跨兩道的消息或者確認(rèn),諸如從一個設(shè)備發(fā)送至另一個的消息,能夠從圖3A至3D中推測出不同道中發(fā)生的事件或狀態(tài)的相對時序。例如,無法單純從圖中推測出道301中的事件308是否發(fā)生在道305中的事件310之前、同時或者之后。然而,能夠單純從圖中推測出事件308發(fā)生在狀態(tài)302之后以及狀態(tài)312之前的事實,因為事件308以及狀態(tài)302和312是道301的一部分。道303和305以及那些道內(nèi)的事件和狀態(tài)也同樣如此。
在該圖中示出的客戶端狀態(tài),諸如狀態(tài)302,示出對客戶端設(shè)備的當(dāng)前狀態(tài)的快照并且包括已發(fā)送更改、待定更改、以及客戶端設(shè)備上的當(dāng)前文檔模型的狀態(tài)。Alice的客戶端狀態(tài)302不包含已發(fā)送更改并且不包含待定更改。狀態(tài)302包括文檔模型307,反映出電子表格,其四個單元格包含數(shù)據(jù)。單元格A1包含文本串“AA”,單元格B1包含文本串“BB”、單元格A2包含文本串“CC”,并且單元格B2包含文本串“DD”。每個狀態(tài)也示出該狀態(tài)的最后同步修訂號。狀態(tài)302的最后同步修訂號為0,其指示修訂號0是于狀態(tài)302前在Alice的設(shè)備與服務(wù)器之間同步的文檔的最后修訂號。Bob的客戶端狀態(tài)306是Bob的起始狀態(tài)并且與Alice的客戶端狀態(tài)302相同。Bob的狀態(tài)306包括文檔模型311。Bob的當(dāng)前文檔模型311與Alice的當(dāng)前文檔模型307相同。
服務(wù)器狀態(tài),諸如服務(wù)器狀態(tài)304,示出服務(wù)器的當(dāng)前狀態(tài)的快照并且包括針對文檔的修訂日志、待定更改的列表、以及文檔的當(dāng)前模型。狀態(tài)304包括文檔模型309,其與Alice的當(dāng)前文檔模型307相同。在一些示例中,服務(wù)器不保存當(dāng)前文檔模型,而僅保存待定更改的列表以及修訂日志。在這些示例中,當(dāng)前文檔模型的狀態(tài)能夠通過將修訂日志中的全部條目應(yīng)用到空白電子表格而獲得。
圖3A至3D描繪出Alice和Bob對由服務(wù)器托管的協(xié)作電子表格執(zhí)行交叉編輯操作的情況。在圖3A至3D中,Alice執(zhí)行拷貝-粘貼操作,但使其更改與服務(wù)器同步之前,Bob插入行,這與Alice更改的拷貝-粘貼范圍相交叉。使用操作變換和協(xié)調(diào)邏輯,對這些交叉的更改進(jìn)行協(xié)調(diào)。
從圖3A開始,Alice、服務(wù)器和Bob全部從協(xié)作文檔的同一模型出發(fā),分別如狀態(tài)302、304和306中所示。另外,Alice、服務(wù)器和Bob全部從修訂號0開始。在事件308中,Alice將范圍B1:B2中的內(nèi)容拷貝到C1:C2。作為事件308的結(jié)果,Alice的設(shè)備處于狀態(tài)312,其包括待定更改313a以及文檔模型313b。待定更改313a對應(yīng)于在事件308中作出的更改。因在事件308中所接收到的更改尚未被修改,故待定更改313a中的單元格范圍與事件308中的單元格范圍相同。Alice的當(dāng)前文檔模型313b被更新成反映Alice的拷貝-粘貼操作的結(jié)果。單元格C1:C2的內(nèi)容此時與單元格B1:B2中的內(nèi)容相同。Alice在狀態(tài)312中的最后同步修訂號仍然是0,原因是Alice的待定更改尚未與服務(wù)器同步。
在由Alice的拷貝-粘貼事件308產(chǎn)生的對文檔的更改與服務(wù)器同步之前,Bob作出更改,如事件310中所示。在事件310中,Bob提供輸入以在行1與2之間向協(xié)作電子表格中插入行。作為事件310的結(jié)果,Bob的設(shè)備處于狀態(tài)314,其不具有已發(fā)送更改、具有待定更改315a、并且具有文檔模型315b。待定更改315a對應(yīng)于在事件310中作出的更改,尚未修改。狀態(tài)314還包括文檔模型315b,其已被更新成反映Bob在事件310中的更改。如文檔模型315b中所示,已經(jīng)插入行,并且行2此時為空。模型311的行2的內(nèi)容已被移動至模型315b中的行3。在狀態(tài)314中,Bob的最后同步修訂號仍為0,原因是Bob的待定更改尚未與服務(wù)器同步。
轉(zhuǎn)至圖3B,消息316描繪出Bob的設(shè)備將Bob對狀態(tài)314的待定更改發(fā)送至服務(wù)器。在該示例中,在發(fā)自事件308的Alice的更改被發(fā)送之前,發(fā)自事件310的Bob的更改被發(fā)送至服務(wù)器。這種狀況可能由數(shù)個因素所致。例如,在Alice作出其更改之前,Bob可能已經(jīng)作出其更改。替選地,更改可能大體上同時發(fā)生,或者Bob的更改可能甚至發(fā)生在Alice的更改之后,但Alice的網(wǎng)絡(luò)連接可能斷續(xù)或者極慢。這些狀況中的任何一個都可能導(dǎo)致服務(wù)器接收Alice的更改稍晚于接收Bob的更改。此時,事件308的Alice的更改與事件310的Bob的更改出現(xiàn)交叉,原因是Bob在行1下插入行分割了Alice的拷貝-粘貼操作的范圍。消息316包含Bob的更改的內(nèi)容(即在行1下插入行的命令)以及修訂號。在一些示例中,每個客戶端將一次僅向服務(wù)器發(fā)送一個更改并且將在發(fā)送另一個更改之前等待接收確認(rèn)。這樣的確認(rèn)傳達(dá)出已在服務(wù)器處應(yīng)用了已發(fā)送更改。在消息316中發(fā)送的修訂號為0,指示Bob的最后同步修訂號為0,由此消息316中的已發(fā)送更改對應(yīng)于修訂號0的狀態(tài)下的電子表格。然而,在一些實施方式中,該修訂號可能代之以對應(yīng)于Bob的設(shè)備預(yù)期應(yīng)用該更改應(yīng)會產(chǎn)生的修訂號。在這些實施方式中,這可以通過將Bob的設(shè)備的最后同步修訂號遞增1來確定。在消息316中發(fā)送更改之后,Bob的設(shè)備處于狀態(tài)320,其包括已發(fā)送更改321a以及文檔模型321b。已發(fā)送更改321a對應(yīng)于狀態(tài)314的待定更改315a。Bob的當(dāng)前文檔321b未從狀態(tài)314發(fā)生改變。另外,狀態(tài)320的最后同步修訂號也未從狀態(tài)314發(fā)生改變。
服務(wù)器狀態(tài)318反映服務(wù)器在接收到Bob的消息316之后的狀態(tài)。狀態(tài)318不包含修訂日志中的條目,包含待定更改319a并且包含文檔模型319b。在狀態(tài)318中,待定更改319a對應(yīng)于消息316中的Bob的更改。更改319a包含指令(即在行1下插入一行)、與更改相關(guān)聯(lián)的修訂號(即0)以及發(fā)送更改的客戶端(Bob)的標(biāo)識符。因更改319a尚未被提交至修訂日志,故當(dāng)前文檔模型319b尚未從模型309發(fā)生改變。
在消息322中,Alice的設(shè)備將事件308的Alice的拷貝-粘貼更改發(fā)送至服務(wù)器。消息322包含更改指令(即將單元格B1:B2拷貝到單元格C1:C2)以及與更改相關(guān)聯(lián)的修訂號(即0)。在消息322中發(fā)送更改之后,Alice設(shè)備處于狀態(tài)324,其包括已發(fā)送更改325a以及文檔模型325b。在狀態(tài)324中,Alice的狀態(tài)312的待定更改313a已被移動至已發(fā)送更改部分并且表現(xiàn)為更改325a。Alice的當(dāng)前文檔模型325b未從狀態(tài)312中的模型313b發(fā)生改變。狀態(tài)324的最后同步修訂號(即0)也未從狀態(tài)312發(fā)生改變。
在接收到消息322中的Alice的更改之后,服務(wù)器然后處于狀態(tài)326中。在狀態(tài)326中,沒有修訂日志中的條目,具有兩個待定更改327a和327b并且具有文檔模型327c。因待定更改327a在接收待定更改327b之前被接收,故待定更改327a第一個出現(xiàn)在列表中。待定更改327a未從狀態(tài)318的待定更改319a發(fā)生改變。因為待定更改327b第二個被接收,其第二個出現(xiàn)在列表中。待定更改327b反映在消息322中從Alice接收到的更改并且包括Alice的拷貝-粘貼指令,其未從消息322發(fā)生改變。更改327b也包含修訂號(即0)以及客戶端發(fā)起的更改(即Alice)。狀態(tài)326也描繪出當(dāng)前文檔模型327c。因還沒有待定更改被應(yīng)用于修訂日志,故模型327c與狀態(tài)318中的模型319b相同。
現(xiàn)轉(zhuǎn)至圖3C,狀態(tài)328反映服務(wù)器在應(yīng)用其最舊待定更改(即狀態(tài)326中的待定更改327a)之后的狀態(tài)。狀態(tài)328包括修訂條目329a、待定更改329b以及文檔模型329c。Bob的行插入已在服務(wù)器處被應(yīng)用并且在修訂日志的第一條目329a中被反映。條目329a包含Bob在行1下的行插入,并且修訂號已被遞增到1。條目329a也包含發(fā)起更改的客戶端(即Bob)的標(biāo)識。另外,當(dāng)前文檔模型329c已被更新成反映條目329a。作為更新的一部分,已在行1下插入行,并且先前行2的內(nèi)容已被移至行3。在已更新的模型329c中,行2是插入的空白行。待定更改329b包含Alice的拷貝-粘貼操作并且與狀態(tài)326的待定更改327b相同。
在應(yīng)用Bob的更改之后,服務(wù)器將消息332發(fā)送至Alice并且將確認(rèn)330發(fā)送至Bob。消息332包含所應(yīng)用的更改的指令(即在行1下插入一行)以及相關(guān)聯(lián)的修訂號(即1)。發(fā)送至Bob的確認(rèn)330是簡單地確認(rèn)Bob最后發(fā)送的更改已被應(yīng)用并且攜帶修訂號1。在一些示例中,因每個客戶端等待直到接收到確認(rèn)之后才發(fā)送另一個更改,故有關(guān)該確認(rèn)所關(guān)聯(lián)的更改并不存在模糊性。
Bob的客戶端狀態(tài)326示出Bob的設(shè)備在接收到確認(rèn)330之后的狀態(tài)并且不包括已發(fā)送更改、不包括待定更改、并且包括文檔模型337。自從Bob接收到確認(rèn)330,Bob的更改便已從狀態(tài)336的已發(fā)送更改部分移除。在狀態(tài)336中,Bob的當(dāng)前文檔模型337與前一狀態(tài)320的模型321b相同,但最后同步修訂號已被更新成匹配確認(rèn)330中所包含的修訂號(即1)。
Alice的設(shè)備在從服務(wù)器接收到消息332之后執(zhí)行事件334中所示的三個步驟。第一步,Alice的設(shè)備針對在消息332中所接收到的傳入更改變換所有待定和已發(fā)送的更改。該操作變換能夠使用圖6的方法600來執(zhí)行。在一些示例中,Alice的設(shè)備可以確定變換已發(fā)送更改339a,原因是尚未針對其接收到確認(rèn)。在其他示例中,Alice的設(shè)備可以確定變換已發(fā)送更改339a,原因是前一狀態(tài)325的最后同步修訂號(即0)小于傳入更改的修訂號(即1)。第二步,Alice的設(shè)備將消息332中的傳入更改應(yīng)用于Alice的文檔模型。第三步,Alice的設(shè)備將其最后同步修訂號更新成匹配傳入消息332中所包含的修訂號。
在Alice的設(shè)備執(zhí)行事件334的操作之后,Alice設(shè)備處于狀態(tài)338,其包括經(jīng)變換的已發(fā)送更改339a、不包括待定更改、并且包括文檔模型339b。已發(fā)送更改339a已經(jīng)針對消息332中的更改而被變換并且被更新成對范圍B1、B3和C1、C3進(jìn)行操作。Alice的當(dāng)前文檔模型339b已被更新成應(yīng)用消息332的更改。在模型339b中,文檔反映Alice的原始拷貝-粘貼操作以及Bob的行插入。行2是空白的,并且先前行2的內(nèi)容已被移至行3。此外,在339b中,單元格C1和C3分別匹配單元格B1和B3。通過在事件334中應(yīng)用操作變換,Alice的已發(fā)送更改339a中的單元格范圍已被分成2個部分。Alice的經(jīng)變換的更改339a沒有對當(dāng)前文檔的行2中的單元格進(jìn)行操作。作為替代,Alice的經(jīng)變換的更改僅對行1和3中的單元格操作。通過這種方式變換更改,以保留Alice的更改的意向。在Alice發(fā)起那些更改時,文檔339b的插入的空白行2還不存在,由此Alice不可能意欲修改該行。在Alice的狀態(tài)338中,最后同步修訂號已被更新成1以匹配與在消息332中所接收到的更改相關(guān)聯(lián)的修訂號。
現(xiàn)轉(zhuǎn)至圖3D,在事件340中,服務(wù)器針對修訂日志中自修訂號0以來的全部更改來變換Alice的待定更改。服務(wù)器可以確定變換Alice的待定更改(即服務(wù)器狀態(tài)328的更改329b),原因是該待定更改的修訂號小于最新修訂條目的修訂號(即服務(wù)器狀態(tài)328的條目329a中的修訂號1)。此外,在事件340中,服務(wù)器將Alice的更改應(yīng)用于修訂日志。服務(wù)器使用由Alice的客戶端在事件334中所使用并且可以使用圖6的方法600來執(zhí)行的同一邏輯變換Alice的拷貝-粘貼操作。在事件334和340二者中,Alice的拷貝-粘貼操作針對Bob的行插入操作而被變換,并且Alice的拷貝-粘貼操作的源范圍和目的地范圍被分開以容納Bob插入的行。由事件340引起的更改被反映在服務(wù)器狀態(tài)344中。
服務(wù)器狀態(tài)344包括兩個修訂條目345a和345b,并且包括文檔模型345c。在狀態(tài)344中,第一修訂條目345a保持未從服務(wù)器狀態(tài)328的修訂條目329a發(fā)生改變,并且修訂條目345b已被添加至修訂日志。修訂條目345b反映服務(wù)器的前一狀態(tài)的最舊待定更改(即服務(wù)器狀態(tài)328的待定更改329b)。修訂條目345b包含Alice的經(jīng)變換的拷貝-粘貼操作以及其修訂號2。經(jīng)更新的文檔模型345c示出將Alice的拷貝-粘貼操作應(yīng)用到前一版本的服務(wù)器文檔329c的結(jié)果,使得單元格B1和B3的內(nèi)容已被拷貝到單元格C1和C3。因服務(wù)器和Alice的設(shè)備使用同一邏輯針對Bob的行插入操作來變換Alice的拷貝-粘貼操作,故服務(wù)器和Alice的設(shè)備此時具有相同的文檔模型。在將Alice的拷貝-粘貼操作提交至修訂日志之后,服務(wù)器將確認(rèn)342發(fā)送至Alice,其簡單地確認(rèn)Alice的最后更改被提交至修訂日志并且攜帶修訂號2。再一次,因在一些示例中,客戶端設(shè)備并不發(fā)送另一個更改,直至從服務(wù)器接收到確認(rèn),故有關(guān)該確認(rèn)所對應(yīng)的更改不具有模糊性。
Alice的最終客戶端狀態(tài)348包括文檔模型349并且反映Alice的設(shè)備在接收到確認(rèn)342之后的狀態(tài)。在最終狀態(tài)348中,Alice的設(shè)備已將其最后保存的修訂號更新成2以匹配在確認(rèn)342中所接收到的修訂號并且已從已發(fā)送更改的列表中移除經(jīng)確認(rèn)的更改。
更進(jìn)一步,在將Alice的拷貝-粘貼操作提交至修訂日志之后,服務(wù)器將消息346發(fā)送至Bob。消息346包括Alice的經(jīng)變換的更改,具體是經(jīng)變換的Alice的拷貝-粘貼操作的指令以及與該提交的更改相關(guān)聯(lián)的修訂號。在接收到消息346后,Bob的設(shè)備在事件350中執(zhí)行三個步驟。第一步,因在Bob的更改上不存在待定或已發(fā)送更改,故沒有更改要變換。如果在Bob的設(shè)備上存在待定或已發(fā)送的更改,則這些更改會通過在消息346中所接收到的傳入更改而被變換。該操作變換能夠使用圖6的方法600來執(zhí)行。第二步,Bob的設(shè)備將消息346中的傳入更改應(yīng)用于文檔模型。第三步,Bob的設(shè)備將其最后保存的修訂號更新成匹配在消息346中所接收到的修訂號。
Bob的最終客戶端狀態(tài)352包括文檔模型353,不包括待定更改,并且不包括已發(fā)送更改,并且反映Bob的設(shè)備在執(zhí)行事件350的操作之后的狀態(tài)。在最終狀態(tài)352中,Bob的設(shè)備已將其文檔模型更新成模型353,其包含將消息346中的傳入更改應(yīng)用到前一客戶端狀態(tài)336的Bob的前一版本的文檔337的結(jié)果。單元格B1和B3的內(nèi)容已被拷貝到單元格C1和C3。Bob的最后保存修訂號已被更新成2以匹配消息346中所包含的修訂號。
在圖3D所示出的最終狀態(tài)中,Alice的拷貝-粘貼操作以及Bob的行插入操作已被傳播至系統(tǒng)中的全部設(shè)備,包括服務(wù)器。文檔模型349、345c和353全部反映出該文檔的同一狀態(tài)。另外,Alice的最后保存修訂號匹配服務(wù)器修訂日志345b中的最后更改的修訂號,Bob的最后保存修訂號也同樣如此。重要地,用跨系統(tǒng)發(fā)送的少量信息便已執(zhí)行這些更新。因所述設(shè)備應(yīng)用相同的協(xié)作邏輯以及操作變換來協(xié)調(diào)交叉的更改,故每個設(shè)備都能夠優(yōu)化地應(yīng)用其擁有的傳入用戶更改并且對那些用戶更改和傳入更改執(zhí)行任何必要的變換。更改的應(yīng)用被稱為“優(yōu)化”是因為客戶端設(shè)備優(yōu)化地假設(shè)其正在用最新版本的模型來工作。然而,為免由當(dāng)前在另一個設(shè)備上發(fā)生的沖突或交叉更改導(dǎo)致可能的復(fù)雜化,客戶端設(shè)備將其最新的更改保存在已發(fā)送或待定更改的列表中,直至從服務(wù)器接收到對該更改的確認(rèn)。因全部設(shè)備都正在使用相同的邏輯和變換,故不必多次跨服務(wù)器發(fā)送大體上相同的信息,例如,通過發(fā)送原始變更以及經(jīng)變換的變更二者。只有原始變更被發(fā)送至服務(wù)器,并且確認(rèn)連同修訂號一起被接收。通過將該修訂號與預(yù)計的修訂號相比較,每個設(shè)備都能夠根據(jù)需要執(zhí)行變換。參照圖4至6,闡述由客戶端設(shè)備和服務(wù)器遵循用來執(zhí)行更新和操作變換的方法的細(xì)節(jié)。
圖4是由客戶端設(shè)備在針對服務(wù)器更改來變換用戶更改時所執(zhí)行的方法400的流程圖。如本文所用,“用戶更改”包括由本地設(shè)備從直接與本地設(shè)備相交互的用戶接收到的更改,并且“服務(wù)器更改”包括由本地設(shè)備從服務(wù)器接收的更改。在一示例中,服務(wù)器更改可以最初由另一個用戶在遠(yuǎn)程用戶設(shè)備(其遠(yuǎn)離本地設(shè)備)處提供并且被傳送至服務(wù)器,該服務(wù)器再將更改傳送至本地設(shè)備。雖然更改可能已經(jīng)由用戶在遠(yuǎn)程設(shè)備處發(fā)起,但因?qū)崿F(xiàn)方法400的本地設(shè)備從服務(wù)器接收該更改,故該更改被稱為服務(wù)器更改。可以在圖3C的步驟334和圖3D的350中執(zhí)行方法400。
在步驟402,客戶端設(shè)備基于存儲在客戶端設(shè)備上的模型向用戶顯示電子表格。在步驟404,設(shè)備接收用以修改電子表格的用戶輸入。在步驟406,設(shè)備將用戶輸入發(fā)送至服務(wù)器。在步驟408,設(shè)備基于所接收的用戶輸入來優(yōu)化地修改其模型。在一些示例中,步驟406和408能夠以相反的順序或者大體上同時發(fā)生。在步驟410,客戶端設(shè)備從服務(wù)器接收輸入。所接收的輸入可以包括用以修改電子表格的指令。
在判定框412處,客戶端設(shè)備確定在步驟406所發(fā)送的用戶輸入是否已經(jīng)由服務(wù)器確認(rèn)。如果尚未接收到確認(rèn),則方法400繼續(xù)至步驟414,在此客戶端設(shè)備針對從服務(wù)器所接收的輸入來變換所發(fā)送用戶輸入并且可以使用圖6的方法600。在此,在步驟414,如果服務(wù)器輸入與用戶輸入相交叉,則通過變換來解決該沖突。如果兩個輸入并不交叉,則大體上沒有更改受步驟414的變更的影響。在步驟416,用戶設(shè)備基于服務(wù)器輸入來修改其最后同步模型。因尚未接收到對已發(fā)送用戶輸入的確認(rèn),故最后同步模型并不反映該用戶輸入。在步驟420,用戶設(shè)備更新其修訂號以匹配在步驟410從服務(wù)器所接收的修訂號。在步驟424,客戶端設(shè)備基于經(jīng)變換的用戶輸入來修改最后同步模型。雖然客戶端設(shè)備基于經(jīng)變換的用戶輸入來優(yōu)化地作出修改并且顯示經(jīng)修改的模型,但因尚未接收到確認(rèn),故最后同步模型仍會不反映在步驟404所接收的用戶輸入。
替選地,如果客戶端設(shè)備確定已在判定框412處從服務(wù)器接收到對所發(fā)送用戶輸入的確認(rèn),則所述方法繼續(xù)至步驟415。在步驟415,自從接收到對用戶輸入的確認(rèn),客戶端設(shè)備便更新其修訂號以匹配確認(rèn)中所包含的修訂號。在步驟418,客戶端設(shè)備基于從服務(wù)器所接收到的輸入來修改其模型。在步驟422,客戶端更新修訂號以匹配在步驟410從服務(wù)器所接收到的輸入中所包含的修訂號,并且返回步驟402,以基于經(jīng)更新的模型向用戶顯示電子表格。
圖5是基于從客戶端設(shè)備所接收的輸入來變換服務(wù)器處的用戶輸入的方法500的流程圖??梢栽趫D3D的步驟340中執(zhí)行方法500。在步驟502,服務(wù)器接收對所托管的電子表格的更改。步驟502中的更改是從經(jīng)由網(wǎng)絡(luò)與服務(wù)器通信的客戶端設(shè)備上的用戶所接收。在判定框504處,服務(wù)器確定更改是否源自舊修訂版。如果更改最初是對比提交至服務(wù)器上的修訂日志的最新版本的電子表格更舊版本的電子表格作出,則更改可能源自舊修訂版。在一些示例中,服務(wù)器可以通過比較修訂號而作出判定。在這些示例中,服務(wù)器將與所接收的更改相關(guān)聯(lián)的修訂號同與其修訂日志中最新提交的條目相關(guān)聯(lián)的修訂號相比較。如果與所接收的更改相關(guān)聯(lián)的修訂號是比與最新提交的更改的條目相關(guān)聯(lián)的修訂號更小的數(shù)字,則服務(wù)器可以確定更改源自舊修訂版。如果兩個修訂號相同,則服務(wù)器可以確定更改源自當(dāng)前修訂版。
如果服務(wù)器在判定框504處確定更改源自舊修訂版,則所述方法繼續(xù)至步驟506。在步驟506,服務(wù)器針對自與更改的修訂號相關(guān)聯(lián)的修訂版以來的全部更改來變換更改,并且可以實施圖6的方法600。通過這種方式,服務(wù)器補(bǔ)償具有不同修訂號的不同設(shè)備的作用。
替選地,如果服務(wù)器在判定框504處確定更改并非源自舊修訂版,則所述方法直接繼續(xù)至步驟508,在該步驟,服務(wù)器將更改提交至修訂日志中的條目并且將新的修訂號分配給該條目。在服務(wù)器處提交更改將其從服務(wù)器的待定更改日志中移除并且基于該更改來更新服務(wù)器的模型。在步驟510,設(shè)備將確認(rèn)發(fā)送至曾發(fā)送更改的用戶。在步驟512,服務(wù)器將更改發(fā)送至編輯協(xié)作文檔的其他用戶。在步驟512中所發(fā)送的更改在步驟506發(fā)生的情況下可以是經(jīng)變換的更改,或者其可以是如在步驟502中所接收的更改,這取決于判定框504的結(jié)果。通過這種方式,服務(wù)器基于接收輸入的順序來變換所接收的用戶輸入。通過基于用戶輸入被接收的順序?qū)ζ溥M(jìn)行變換,服務(wù)器確保多個設(shè)備能夠保存相似的協(xié)作電子表格的模型。因全部設(shè)備都使用與服務(wù)器相同的協(xié)作邏輯和操作變換,故在沒有過多網(wǎng)絡(luò)流量的情況下,保存相似的模型。
圖6是通過交叉更改而變換拷貝-粘貼更改的方法600的流程圖。交叉更改可能影響拷貝-粘貼更改的源范圍或目的地范圍或者影響這兩個范圍??截?粘貼更改源自第一用戶,并且交叉更改源自第二用戶。在一些示例中,這兩個更改均源自相同的用戶,但源自不同的設(shè)備。如果用戶同時登陸到來自諸如膝上型計算機(jī)以及平板型計算機(jī)的不同設(shè)備的云計算系統(tǒng),則可能發(fā)生這些示例。在一些示例中,這兩個更改均源自相同設(shè)備上的不同用戶。因拷貝-粘貼更改以及交叉更改可以對相交的范圍進(jìn)行操作,故兩個操作之間可能存在沖突??梢詫Ψ秶械囊粋€或多個應(yīng)用操作變換來解決這種沖突,以便以根據(jù)每個用戶的意向而對協(xié)作電子表格應(yīng)用更改。操作變換可以由客戶端設(shè)備中的任何一個并且由協(xié)調(diào)更改的服務(wù)器來執(zhí)行??梢詫⒎椒?00使用于在圖3的事件334、340和352中的任何一個、圖4的步驟414、圖5的步驟506或者其任何組合中執(zhí)行操作變換。
在步驟602,從用戶接收拷貝-粘貼更改。該更改可以從實施方法600的設(shè)備的用戶輸入組件接收,或者該更改可以從網(wǎng)絡(luò)上的另一個設(shè)備接收,諸如從服務(wù)器或用戶設(shè)備。在步驟604,從網(wǎng)絡(luò)上的另一個用戶接收交叉更改。該更改可以從實施方法600的設(shè)備的用戶輸入組件接收,或者其可以從網(wǎng)絡(luò)上的另一個設(shè)備接收,諸如從用戶設(shè)備的服務(wù)器。如前所討論,當(dāng)多個用戶編輯電子表格的同一部分時,可能發(fā)生交叉更改。當(dāng)發(fā)生這種情況時,正在編輯的單元格的范圍可能交叉,導(dǎo)致關(guān)于編輯中的每一個編輯引用哪些單元格的潛在模糊性。特別地,在一個設(shè)備處作出的拷貝-粘貼更改可以與在另一個設(shè)備處作出的另一個更改交叉。例如,可以在拷貝-粘貼操作的目的地范圍相交的位置插入行。
在判定框606處,確定交叉更改的類型。如果確定交叉更改為插入或者刪除行或列,則所述方法繼續(xù)至步驟608,在該步驟中,在交叉更改的位置處,分開與拷貝-粘貼操作的范圍相關(guān)聯(lián)的一個或多個范圍。分開的范圍可以是拷貝-粘貼操作的源范圍或者目的地范圍。在一些示例中,源范圍和目的地范圍都被分開。將每個分開的范圍均分成兩個部分,以允許變換受影響的部分或多個部分的索引。在步驟612,確定插入或者刪除的大小,這可能涉及確定待插入或者刪除的行號或者列號。
在判定框618處,設(shè)備確定交叉更改是插入還是刪除。如果確定交叉更改為插入,則所述方法繼續(xù)至步驟624。在步驟624,確定增量為正量并且在量值上等于待插入的行號。在判定框618處,如果確定交叉更改為刪除,則所述方法繼續(xù)至步驟626。在步驟626,確定增量為負(fù)量并且在量值上等于待刪除的行號。在步驟628,拷貝-粘貼更改按步驟624或626中所確定的增量來變換。
按增量變換拷貝-粘貼更改可以包括將增量添加至所分開的范圍部分中的一個部分的索引。因增量可以為正或為負(fù),故受影響的索引可以相應(yīng)增加或減少。例如,如果在步驟608中將目的地范圍分成兩個部分,一個部分具有低于交叉更改的位置的索引,并且另一個部分具有高于交叉更改的位置的索引,則可以將增量添加至具有高于交叉更改的位置的索引的部分的索引。
如果交叉更改是插入,則具有高于交叉更改的位置的索引的部分可以使其索引增加插入的大小。如果插入是行插入,則只有行索引可能受增量影響。如果插入是列插入,則只有拷貝-粘貼范圍的列索引可能受增量影響。
刪除一個或多個行或者列可以通過與插入一個或多個行或者列大體上相同的方式來實現(xiàn),除索引減少而非增加。添加負(fù)增量使得高于交叉更改的位置的部分的索引減少刪除的大小。
調(diào)整拷貝-粘貼范圍中的單元格的索引并不影響單元格本身的內(nèi)容,其也不影響單元格內(nèi)所包括的串中所包含的各個字符的索引。只有在電子表格中定位單元格的索引受到這種變換操作的影響。
在步驟628中所變換的索引可以是絕對索引或者相對索引。絕對索引是指單元格在電子表格內(nèi)的絕對位置,而相對索引是指單元格相對于另一個單元格的相對位置。絕對索引的示例會是“A1”或者“D12”。這些會分別指列“A”、行“1”以及列“D”、行“12”。相對基準(zhǔn)的示例會是“R2C5”。這會是指在包含基準(zhǔn)的單元格向下兩行并且向右五列的單元格。相對基準(zhǔn)的另一個示例會是“R-3C-2”。該相對基準(zhǔn)會是指在包含相對引用的單元格向上三行并且向左兩列的單元格。在步驟628,可以按增量調(diào)整絕對基準(zhǔn)或者相對基準(zhǔn)。在步驟630,當(dāng)在步驟604接收到交叉更改時,應(yīng)用該交叉更改。在步驟632,應(yīng)用經(jīng)變換的拷貝-粘貼操作。在此,當(dāng)在步驟628中變換拷貝-粘貼操作時,應(yīng)用該拷貝-粘貼操作。將參照圖7和8來描述與拷貝-粘貼更改相交的插入以及刪除行和列的進(jìn)一步細(xì)節(jié)。
在判定框606處,如果確定交叉更改是設(shè)置單元格操作,則所述方法繼續(xù)至判定框610。設(shè)置單元格操作一般是用以更改一個或多個單元格的操作并且可以包括設(shè)置單元格的值、設(shè)置或編輯單元格的公式、以及設(shè)置或編輯單元格的格式。單元格的格式可以包括文本格式化,諸如粗體或用斜字體、更改單元格的大小、以及更改單元格的邊框。這些設(shè)置單元格操作可能不需要如同插入或者刪除行或者列那般將拷貝-粘貼操作的范圍分開。在判定框610處,參照拷貝-粘貼操作的源范圍以及目的地范圍,確定設(shè)置單元格操作的位置。
如果設(shè)置單元格操作的位置影響拷貝-粘貼操作的源范圍,則所述方法繼續(xù)至步驟614,在該步驟中,將設(shè)置單元格操作應(yīng)用于源范圍的所指令的部分。在步驟620,在沒有變換的情況下,應(yīng)用拷貝-粘貼更改。
在判定框610,如果確定設(shè)置單元格操作的位置影響目的地范圍,則所述方法繼續(xù)至步驟616,在該步驟中,按所接收的來應(yīng)用拷貝-粘貼更改。在步驟622,將設(shè)置單元格操作應(yīng)用于其影響的目的地范圍的部分。通過這種方式,設(shè)置單元格操作始終“取勝”并且設(shè)置單元格操作不會被拷貝-粘貼操作覆蓋。參照圖9和10來描述設(shè)置單元格更改與拷貝-粘貼更改相交的進(jìn)一步細(xì)節(jié)。
在一些示例中,設(shè)置單元格操作可以影響源范圍以及目的地范圍二者。在這些示例中,如圖6所示,將各自根據(jù)步驟614和620對源進(jìn)行處理,并且將根據(jù)步驟616和622對目的地范圍進(jìn)行處理。通過應(yīng)用根據(jù)方法600的變換,能夠?qū)⒖截?粘貼操作以及相交的更改操作都應(yīng)用于表示協(xié)作電子表格的模型,同時仍捕捉每個用戶的意向。另外,因為與協(xié)作電子表格通信的所有設(shè)備都應(yīng)用該方法600來進(jìn)行交叉的更改,所以減少了網(wǎng)絡(luò)流量。
圖7圖示出可以如何根據(jù)本文所述的系統(tǒng)和方法來協(xié)調(diào)來自一個用戶的插入行操作相交來自另一個用戶的拷貝粘貼操作,同時仍捕捉這兩個用戶的意向。在圖7中,用戶Charlie和Dave都正各自在不同的設(shè)備上編輯協(xié)作電子表格。狀態(tài)710描繪出在作出更改之前的電子表格的狀態(tài)。狀態(tài)720圖示出協(xié)作電子表格在已應(yīng)用這兩個更改并且已使用本文所述的操作變換方法對其進(jìn)行協(xié)調(diào)之后的狀態(tài)。Charlie發(fā)起拷貝-粘貼操作704,同時Dave發(fā)起行插入操作702。Charlie和Dave的操作大體上同時發(fā)生,以致沒有用戶在他正執(zhí)行其操作時知道其他用戶的更改。如果Charlie和Dave正在完全同時工作,便可能發(fā)生這種情況,或者如果Charlie和Dave中的一個或兩個具有高度延時的很慢網(wǎng)絡(luò)連接,也可能發(fā)生這種情況。在任一狀況中,一個用戶都可能不知道可以由其他用戶作出的最新更改。
在704,Charlie發(fā)起拷貝-粘貼操作以將單元格D2的內(nèi)容拷貝到范圍D3:D5。因此,Charlie的拷貝-粘貼操作具有源范圍712(單元格D2)以及目的地范圍714(單元格D3:D5)。在702,Dave在協(xié)作電子表格的行3與行4之間插入行716。
如狀態(tài)720中所示,原始目的地范圍714(單元格D3:D5)在單元格D3與范圍D4:D5之間的交叉插入的位置被分成兩個部分。下一步,將具有高于分開處的索引的范圍部分下移一行。通過根據(jù)插入的大小來遞增該部分的索引,使該部分移位。在該示例中,插入一行,故將狀態(tài)710中的原始部分D4:D5的行索引遞增1,以得出狀態(tài)720中的部分D5:D6。因為在該示例中沒有插入列,所以列索引(均由“D”表示)不變。將前述操作變換應(yīng)用于拷貝-粘貼更改指令,而非電子表格本身。下一步,根據(jù)插入行更改以及經(jīng)變換的拷貝-粘貼更改來修改電子表格。
應(yīng)用Dave的行插入更改以在行3下插入一行,在行4處產(chǎn)生空白行。狀態(tài)710中的先前行4和5的內(nèi)容已被移至狀態(tài)720中的行5和6。在插入后應(yīng)用Charlie的經(jīng)變換的拷貝-粘貼更改。經(jīng)變換的拷貝-粘貼更改將源范圍D2的內(nèi)容拷貝到新的目的地范圍D3、D5:D6。單元格722(D2)保持如其在狀態(tài)710中那樣。單元格724a-c指示經(jīng)變換的拷貝-粘貼操作的目的地范圍并且示出經(jīng)變換的操作的結(jié)果。單元格724a(D3)已被更新成反映拷貝-粘貼操作。單元格724a包含公式“=B3*C3”。如圖7中所示,用戶可以在單元格724中輸入公式,但協(xié)作電子表格可以在內(nèi)部將相對公式存儲為“=R0C-2*R0C-1”,指示位于單元格712向左兩列并且與其在同一行的單元格的內(nèi)容應(yīng)乘以位于單元格712向左一列并且與其在同一行的單元格的內(nèi)容。在本文中所描述或圖示的公式中的任一個都可以被實現(xiàn)為通用格式RxCy的相對公式,其中,“R”為行索引遵循的標(biāo)識符,“x”為相對行索引,“C”為列索引遵循的標(biāo)識符,并且“y”為相對列索引。相關(guān)行索引“x”指定行號(并且通過其符號指定方向),區(qū)分由相對公式所指示的單元格與包含相對公式的單元格。相對列索引“y”指定列號(并且通過其符號指定方向),區(qū)分由相對公式所指示的單元格與包含相對公式的單元格。在本文中所描述或圖示的公式中的任一個都可以被實現(xiàn)為通用絕對格式NZ的絕對公式。在該通用絕對格式中,“N”指定列索引并且“Z”指定由絕對公式所指示的單元格的行索引。在一些示例中,在一個或多個索引前用“$”符號將絕對公式顯示給用戶(即$N$Z)。
在圖7中所示的示例中,源范圍722(D2)中的公式是相對公式,并不是絕對公式,故D3中的公式也是相對公式并且反映該相對公式。單元格726是空白單元格,因為其處于空白行中,其被插入通過Dave的相對插入操作702在行3下插入的空白行中。單元格724b此時包含公式“=B5*C5”。單元格724b如同單元格724a一樣包含從單元格722粘貼的相對公式。單元格724c具有與單元格724b相似的公式。通過變換與拷貝-粘貼操作相關(guān)聯(lián)的范圍,調(diào)整拷貝-粘貼的目的地范圍以考慮插入的行。對拷貝-粘貼范圍進(jìn)行變換以及相對公式的上述描述也適用于對關(guān)于圖8至10中所示的操作的范圍進(jìn)行變換。雖然可以作出調(diào)整以考慮圖8至10的不同交叉操作,但使用相似的原理。圖7中所示的示例是說明性的,并且在一些示例中,多于兩個的用戶編輯協(xié)作電子表格。在另一個示例中,一個用戶編輯從多個設(shè)備編輯協(xié)作電子表格。
圖8圖示出如何根據(jù)本文所述的系統(tǒng)和方法來協(xié)調(diào)來自一個用戶的刪除行操作相交另一個用戶的拷貝-粘貼操作。狀態(tài)810示出正由用戶Charlie和Dave編輯的協(xié)作電子表格在應(yīng)用任何編輯之前的狀態(tài)。狀態(tài)820圖示出協(xié)作電子表格在已根據(jù)本文所述的系統(tǒng)和方法應(yīng)用并協(xié)調(diào)這兩個用戶的更改之后的的狀態(tài)。
在802,Charlie提供拷貝-粘貼輸入以將單元格D2的內(nèi)容拷貝到范圍D3:D5。在804,Dave在其設(shè)備上提供輸入以刪除該電子表格的行4。Charlie和Dave正從分立的設(shè)備編輯電子表格,并且如圖7中所示,各自作出更改,而不知道其他用戶的更改。因此,須根據(jù)本文所述的系統(tǒng)和方法對他們的更改進(jìn)行協(xié)調(diào)。在810中圖示出Charlie的編輯802,用于將源范圍812中的單元格D2的內(nèi)容拷貝到目的地范圍814中的單元格D3:D5。Dave的刪除行操作的范圍是816處所示的行4。源范圍822與原始源范圍812大體上相同,并且單元格824a-b此時已根據(jù)Charlie的拷貝-粘貼操作802而被更新。Dave的行刪除804已使得范圍816從電子表格中刪除。通過變換與拷貝-粘貼操作相關(guān)聯(lián)的范圍,調(diào)整拷貝-粘貼的目的地范圍以考慮刪除的行。
圖9圖示出如何根據(jù)本文所述的系統(tǒng)和方法來協(xié)調(diào)來自一個用戶的設(shè)置單元格操作相交另一個用戶的拷貝粘貼操作的源范圍。狀態(tài)910示出由用戶Charlie和Dave編輯的協(xié)作電子表格在更改應(yīng)用之前的狀態(tài)。狀態(tài)920圖示出協(xié)作電子表格在Charlie以及Dave的更改已被協(xié)調(diào)和應(yīng)用之后的狀態(tài)。根據(jù)類似于參照圖7所述的情況,Dave和Charlie正各自在其相應(yīng)的設(shè)備上查看協(xié)作電子表格。
在902,Charlie提供輸入以將源范圍912中的單元格D2的內(nèi)容拷貝到目的地范圍914中的單元格D3:D5中。在904,Dave不知道Charlie的輸入而提供輸入以將單元格D2中的公式更改成“=B2*C2*1.09”。在一些示例中,如參照圖7所述,這個公式以及其他公式是相對公式。因為Charlie和Dave各自作出更改,而不知道其他用戶的更改,所以須根據(jù)本文所述的系統(tǒng)和方法對他們的更改進(jìn)行協(xié)調(diào)。單元格922是Charlie的拷貝-粘貼操作的源范圍并且單元格924a-c是Charlie的拷貝-粘貼操作的目的地單元格。因為Dave的設(shè)置單元格操作被應(yīng)用于Charlie的拷貝-粘貼操作的源范圍,所以Dave的設(shè)置單元格操作在Charlie的拷貝-粘貼操作之前被應(yīng)用于協(xié)作電子表格,如由圖6的方法600所決定。通過這種方式,Dave的設(shè)置單元格編輯也被拷貝到Charlie的目的地范圍。通過以適當(dāng)?shù)捻樞騺韴?zhí)行交叉編輯,調(diào)整拷貝-粘貼操作以考慮設(shè)置單元格操作,并且保留每個用戶的原始意向。Charlie和Dave都會查看到根據(jù)920中所示視圖的協(xié)作電子表格。
圖10圖示出如何根據(jù)本文所述的系統(tǒng)和方法來協(xié)調(diào)來自一個用戶的設(shè)置單元格操作相交來自另一個用戶的拷貝-粘貼操作的目的地范圍。兩個用戶Charlie和Dave正各自在其相應(yīng)的設(shè)備上編輯協(xié)作電子表格并且各自提供輸入。狀態(tài)1010描述協(xié)作文檔在應(yīng)用任一用戶的更改之前的狀態(tài)。狀態(tài)1020圖示出協(xié)作電子文檔在已協(xié)調(diào)和應(yīng)用Charlie以及Dave的更改之后的狀態(tài)。在1002,Charlie提供拷貝-粘貼操作以將源范圍1012中的單元格D2的內(nèi)容拷貝到目的地范圍1014中的單元格D3:D5中。在步驟1004,Dave不知道Charlie的拷貝-粘貼輸入而提供輸入以將單元格D4中的公式更改成“=B4*C4*1.09”。Dave的設(shè)置單元格輸入影響Charlie的拷貝-粘貼操作的目的地范圍。在一些示例中,如參照圖7所述,單元格D4中的公式以及其他公式是相對公式。因為每個用戶在作出他們自己的輸入時都不知道其他用戶的輸入,所以須根據(jù)本文所述的系統(tǒng)和方法對更改進(jìn)行協(xié)調(diào)。單元格1022未從狀態(tài)1010發(fā)生改變。單元格1024a-b已被更新成反映Charlie的拷貝-粘貼操作的結(jié)果。單元格1026也被更新成反映Charlie的拷貝-粘貼操作,而其也已被更新成反映Dave的設(shè)置單元格操作。因為Dave的設(shè)置單元格操作與Charlie的拷貝-粘貼操作的目的地范圍相交,所以首先應(yīng)用Charlie的拷貝-粘貼操作,其次再應(yīng)用Dave的設(shè)置單元格操作。該順序由圖6的方法600來決定。通過以適當(dāng)?shù)捻樞騺韴?zhí)行沖突的編輯,調(diào)整拷貝-粘貼操作以考慮設(shè)置單元格操作,并且在經(jīng)協(xié)調(diào)的更改中保留每個用戶的原始意向。Charlie以及Dave此時都在他們相應(yīng)的設(shè)備中的每一個上查看到如狀態(tài)1020中所示的協(xié)作電子表格。
圖11圖示出在協(xié)作電子表格中拼貼式拷貝-粘貼操作的結(jié)果并且包括狀態(tài)1110和1120。狀態(tài)1110圖示出協(xié)作電子表格在應(yīng)用拷貝-粘貼操作之前的狀態(tài)。狀態(tài)1110包括源范圍1112以及目的地范圍1114。如本文所用,術(shù)語“拼貼”描述目的地范圍大于源范圍的拷貝-粘貼操作。在拼貼式拷貝粘貼操作中,根據(jù)范圍中的每一個的相應(yīng)大小,將源范圍的內(nèi)容多次拷貝到目的地范圍中。拼貼可以被使用于本文所述的拷貝-粘貼操作中的任一個中。拼貼式拷貝-粘貼操作的源范圍1112由兩個單元格組成,這兩個單元格為單元格A1和A2。單元格A1包含文本“AA”,并且單元格A2包含文本“BB”。拼貼式拷貝-粘貼操作的目的地范圍1114由范圍C2:E5中的12個單元格組成。
在對協(xié)作電子表格應(yīng)用拼貼式拷貝-粘貼操作之后,狀態(tài)1120反映該操作的結(jié)果。狀態(tài)1120包括源范圍1122a-b中的單元格以及目的地范圍1124a-m中的單元格。單元格1122a-b沒有改變,因為它們都是操作的源單元格。單元格1124a-m此時包括拼貼的單元格1122a-b的內(nèi)容。因為目的地范圍1114在列尺寸上比源范圍1112大三倍,所以在列尺寸上將源單元格拼貼三次以產(chǎn)生狀態(tài)1120。此外,因為范圍1114在行尺寸上比源范圍112大兩倍,所以將目的地范圍1112中的單元格在行尺寸上拼貼兩次以產(chǎn)生狀態(tài)1120。如果目的地范圍1114已包括附加行(例如,如果其反而由范圍C2:E6組成),則源范圍1112在行尺寸上仍會被僅拼貼兩次以產(chǎn)生狀態(tài)1120。因為范圍1114在行尺寸上大于范圍1112的倍數(shù)會出于拼貼目的而被四舍五入到最接近的整數(shù),所以會發(fā)生這種情況。
對于用戶而言,可能十分需要拼貼,因為用戶能夠以最少次的輸入將少數(shù)源單元格拷貝到非常大的目的地范圍中。然而,如果未恰當(dāng)處理拼貼,則當(dāng)協(xié)作電子表格中實施拼貼時,可能導(dǎo)致在網(wǎng)絡(luò)上過多傳送數(shù)據(jù)。如果目的地范圍中的數(shù)據(jù)以其整體中的一些或全部被傳送至網(wǎng)絡(luò)上的其他設(shè)備,諸如服務(wù)器以及其他客戶端設(shè)備,便可能發(fā)生這種情況。如果通過這種方式對狀態(tài)1120中所示的協(xié)作電子表格實施拼貼,則會在網(wǎng)絡(luò)上傳送單元格1124a至m中的每一個中的文本。因此,在網(wǎng)絡(luò)上傳送的數(shù)據(jù)與目的地范圍的大小成比例,以便數(shù)據(jù)傳送量可能相當(dāng)大。
然而,如果通過在網(wǎng)絡(luò)上僅傳送指令和范圍索引而在協(xié)作電子表格中實現(xiàn)拼貼,并且獨立地在每個本地設(shè)備處執(zhí)行拼貼,則可以減少數(shù)據(jù)傳送。在狀態(tài)1120中所示的示例中,僅需在網(wǎng)絡(luò)上將對源范圍和目的地范圍的指定傳送至其他設(shè)備,無論源范圍或者目的地范圍的大小如何,只產(chǎn)生固定的數(shù)據(jù)量。在一些示例中,也可以傳送源范圍中所包含的數(shù)據(jù)連同拷貝-粘貼指令。在這些示例中,在網(wǎng)絡(luò)上傳送的數(shù)據(jù)量與源范圍的大小成比例,其仍可能遠(yuǎn)小于目的地范圍的大小。這些示例使得網(wǎng)絡(luò)流量小于目的地范圍的數(shù)據(jù)以其整體的一些或全部被傳送的情況。如圖11中所示的拼貼可以被使用于本文所述的拷貝-粘貼操作中的任一個中。
圖12是用于執(zhí)行本文所述過程中的任一個的計算設(shè)備的框圖,諸如圖1至11的系統(tǒng)的組件中的任一個。這些系統(tǒng)中的組件的每一個都可以被實現(xiàn)在一個或多個計算設(shè)備1200上。在某些方面,這些系統(tǒng)的多個組件可以被包括在一個計算設(shè)備1200內(nèi)。在某些實施方式中,組件以及存儲設(shè)備可以跨多個計算設(shè)備1200來實現(xiàn)。
計算設(shè)備1200包括至少一個通信接口單元、輸入/輸出控制器1210、系統(tǒng)存儲器、以及一個或多個數(shù)據(jù)存儲設(shè)備。系統(tǒng)存儲器包括至少一個隨機(jī)存取存儲器(RAM 1202)以及至少一個只讀存儲器(ROM 1204)。這些元件中的全部都與中央處理單元(CPU 1206)通信以促進(jìn)計算設(shè)備1200的操作。計算設(shè)備1200可以以許多不同方式來配置。例如,計算設(shè)備1200可以是常規(guī)的獨立計算機(jī),或者替選地,計算設(shè)備1200的功能可以跨多個計算機(jī)系統(tǒng)和架構(gòu)來分布。替選地,計算機(jī)系統(tǒng)可以被虛擬成提供多個計算設(shè)備1200的功能。在圖12中,計算設(shè)備1200經(jīng)由網(wǎng)絡(luò)或者本地網(wǎng)絡(luò)而被鏈接至其他服務(wù)器或者系統(tǒng)。
計算設(shè)備1200可以被配置成分布式架構(gòu),其中,數(shù)據(jù)庫以及處理器被封裝于分立的單元或者位置中。一些單元執(zhí)行主要處理功能并且最低限度包含通用型控制器或處理器以及系統(tǒng)存儲器。在分布式架構(gòu)的實施方式中,這些單元中的每一個都可以經(jīng)由通信接口單元1208而被連接至通信集線器或者端口(未示出),其用作與其他服務(wù)器、客戶端、或者用戶計算機(jī)以及其他相關(guān)設(shè)備的主要通信鏈路。通信集線器或者端口本身可能具有最低的處理能力,其主要用作通信路由器。各種通信協(xié)議可以是系統(tǒng)的一部分,包括但不限于:以太網(wǎng)、SAP、SASTM、ATP、BLUETOOTHTM、GSM以及TCP/IP。
CPU 1206包括處理器,諸如一個或多個常規(guī)的微處理器以及一個或多個補(bǔ)充的協(xié)同處理器,諸如數(shù)學(xué)協(xié)同處理器,用于卸載來自CPU 1206的工作負(fù)載。CPU 1206與通信接口單元1208以及輸入/輸出控制器1210通信,由此CPU 1206與其他設(shè)備通信,諸如其他服務(wù)器、用戶終端、或者設(shè)備。通信接口單元1208以及輸入/輸出控制器1210可以包括多個通信信道,用于同時與例如其他處理器、服務(wù)器合作和客戶終端通信。
CPU 1206還與數(shù)據(jù)存儲設(shè)備通信。數(shù)據(jù)存儲設(shè)備可以包括磁性、光學(xué)或者半導(dǎo)體存儲器的適當(dāng)組合,并且可以包括例如RAM 1202、ROM 1204、閃盤驅(qū)動器、諸如致密盤的光盤或者硬盤或硬盤驅(qū)動器。CPU 1206以及數(shù)據(jù)存儲設(shè)備各種可以例完全位于單個計算機(jī)或者其他計算設(shè)備內(nèi);或者彼此通過通信介質(zhì)相連接,諸如USB端口、串行端口電纜、同軸電纜、以太網(wǎng)電纜、電話線、射頻收發(fā)器或者其他類似的無線或有線介質(zhì)或者前述的組合。例如,CPU 1206可以經(jīng)由通信接口單元1208而被連接至數(shù)據(jù)存儲設(shè)備。CPU 1206可以被配置成執(zhí)行一個或多個特定的處理函數(shù)。
數(shù)據(jù)存儲設(shè)備可以存儲例如:(i)用于計算設(shè)備1200的操作系統(tǒng)1212;(ii)適于根據(jù)本文所述的系統(tǒng)和方法,特別是根據(jù)參照CPU 1206所詳述的過程,引導(dǎo)CPU 1206的一個或多個應(yīng)用1214(例如,計算機(jī)程序代碼或者計算機(jī)程序產(chǎn)品);或者(iii)適于存儲信息的數(shù)據(jù)庫1216,其可以用于存儲程序所需的信息。
操作系統(tǒng)1212以及應(yīng)用1214可以被存儲成例如壓縮、未編譯以及加密的格式,并且可以包括計算機(jī)程序代碼。除數(shù)據(jù)存儲設(shè)備之外,可以從計算機(jī)可讀介質(zhì)中,諸如從ROM 1204或者從RAM 1202中將程序的指令讀入處理器的主存儲器中。雖然程序中指令序列的執(zhí)行使得CPU 1206執(zhí)行本文中所述過程步驟,但硬接線電路可以代替實現(xiàn)本發(fā)明的過程的軟件指令來使用或者與其相結(jié)合。因此,所述的系統(tǒng)和方法并不限于硬件和軟件的任何特定組合。
可以提供合適的計算機(jī)程序代碼以便執(zhí)行與執(zhí)行如本文所述的過程相關(guān)的一個或多個功能。程序也可以包括程序元素,諸如操作系統(tǒng)1212、數(shù)據(jù)庫管理系統(tǒng)以及允許處理器經(jīng)由輸入/輸出控制器1210與計算機(jī)外圍設(shè)備(例如,視頻播放器、鍵盤、計算機(jī)鼠標(biāo)等)相交互的“設(shè)備驅(qū)動器”。
如本文所用的術(shù)語“計算機(jī)可讀介質(zhì)”是指提供或者參與提供指令到計算設(shè)備1200的處理器(或者任何其他的本文所述設(shè)備的處理器)以便執(zhí)行的任何非暫時性介質(zhì)。這樣的介質(zhì)可以采取許多形式,包括但不限于非易失性介質(zhì)以及易失性介質(zhì)。非易失性介質(zhì)例如包括光盤、磁盤或光磁盤或者集成電路存儲器,諸如快閃存儲器。易失性介質(zhì)包括動態(tài)隨機(jī)存取存儲器(DRAM),其通常構(gòu)成主存儲器。計算機(jī)可讀介質(zhì)的常用形式例如包括軟盤、柔性盤、硬盤、磁帶、任何其他磁性介質(zhì)、CD-ROM、DVD、任何其他光介質(zhì)、穿孔卡、紙帶、具有孔圖案的任何其他物理介質(zhì)、RAM、PROM、EPROM或EEPROM(電可擦除可編程只讀存儲器)、FLASH-EEPROM、任何其他存儲器芯片或卡匣、或者計算機(jī)能夠從中讀取的任何其他非暫時性介質(zhì)。
各種形式的計算機(jī)可讀存儲介質(zhì)可以參與將一個或多個指令的一個或多個序列攜帶至CPU 1206(或者任何其他的本文所述設(shè)備的處理器)以便執(zhí)行。例如,指令最初可以源于遠(yuǎn)程計算機(jī)(未示出)的磁盤上。遠(yuǎn)程計算機(jī)能夠?qū)⒅噶罴虞d至其動態(tài)存儲器中并且使用調(diào)制解調(diào)器通過以太網(wǎng)連接、電纜線路乃至電話線來發(fā)送指令。計算機(jī)設(shè)備1200本地的通信設(shè)備能夠在各自的通信線路上接收數(shù)據(jù)并且將數(shù)據(jù)置于用于處理器的系統(tǒng)總線上。系統(tǒng)總線將數(shù)據(jù)攜帶至主存儲器,處理器從該主存儲器中檢索指令并且執(zhí)行指令。由主存儲器所接收的指令可以可選地在由處理器執(zhí)行之前或者之后被存儲在存儲器上。此外,指令可以經(jīng)由通信端口作為電子、電磁或光信號而被接收,這些信號是攜帶各種類型的信息的無線通信或者數(shù)據(jù)流的示例性形式。
顯而易見,在附圖中所示的實施方式中,可以在許多不同形式的軟件、固件和硬件中實現(xiàn)本文所述的系統(tǒng)和方法的多個方面。用來實現(xiàn)與本文所述的系統(tǒng)和方法的原理一致的多個方面的實際軟件代碼或者專用控制硬件并非對本發(fā)明的限制。因此,未參照特定的軟件代碼來描述所述系統(tǒng)和方法的多個方面的操作和行為,可以理解成本領(lǐng)域普通技術(shù)人員能夠基于本文的描述來設(shè)計軟件和控制硬件以實現(xiàn)各方面。
類似地,雖然在圖中以特定次序來描繪操作,但這不應(yīng)被理解為要求以所示的特定次序或者以順序來執(zhí)行這樣的操作,或者執(zhí)行所有圖示的操作,以獲得期望的結(jié)果。在某些情況下,多任務(wù)以及并行處理可能是有利的。