專利名稱:多線程無代碼用戶定義函數(shù)的制作方法
多線程無代碼用戶定義函數(shù)背景在會計中,表格是具有組織關(guān)于交易的數(shù)據(jù)以供人檢查的列和行的大幅紙張。表 格在單頁紙上示出例如,成本、收入、稅、或其他相關(guān)數(shù)據(jù)以供經(jīng)理在做決策時檢查。表格已被計算機化成“電子表格”。電子表格將信息組織成軟件定義的列和行。例 如,電子表格中的信息然后可通過公式來求和以給出總數(shù)。運行電子表格的計算機程序?qū)?來自許多源的信息歸納在一個地方并以給定格式呈現(xiàn)該信息。電子表格幫助決策制定者查 看組織的財務(wù)“全景”。概述提供本概述是為了以簡化的形式介紹將在以下詳細描述中進一步描述的一些概 念。本概述并非旨在標(biāo)識出所要求保護的主題的關(guān)鍵特征或必要特征。本概述亦非旨在用 于限制所要求保護的主題的范圍??商峁┮环N多線程無代碼用戶定義函數(shù)(UDF)。首先,可以從對應(yīng)于調(diào)用無代碼 UDF的電子表格的計算線程接收至少一個輸入值。然后,可將該至少一個輸入值保存在包含 無代碼UDF的UDF存儲區(qū)域之外的線程存儲區(qū)域中。接著,可執(zhí)行無代碼UDF,包括使用無 代碼UDF中的至少一個公式以及來自線程存儲區(qū)域的至少一個輸入值來執(zhí)行至少一個計 算。然后可將響應(yīng)于執(zhí)行無代碼UDF而產(chǎn)生的至少一個輸出值返回到對應(yīng)于調(diào)用該無代碼 UDF的電子表格的計算線程。前述概括描述和以下詳細描述兩者都提供示例且都只是說明性的。因此,前述概 括描述和以下詳細描述不應(yīng)被認為是限制性的。此外,除了此處所闡明的那些之外還可提 供其他特征或變型。例如,各實施方式可涉及在詳細描述中描述的各種特征組合和子組合。附圖簡述合并在本發(fā)明中并構(gòu)成其一部分的附圖示出本發(fā)明的各種實施方式。在附圖中
圖1是一操作環(huán)境的框圖;圖2是示出跨電子表格的一部分的無代碼UDF的圖示;圖3是示出可調(diào)用無代碼UDF的電子表格的圖示;圖4是用于提供多線程無代碼用戶定義函數(shù)的方法的流程圖;圖5是示出跨電子表格的一部分的無代碼UDF的圖示;圖6是示出按UDF數(shù)據(jù)結(jié)構(gòu)的圖示;圖7是示出按調(diào)用數(shù)據(jù)結(jié)構(gòu)的圖示;圖8是示出用于正態(tài)曲線UDF的按單元格數(shù)據(jù)結(jié)構(gòu)的圖示;以及圖9是包括計算設(shè)備的系統(tǒng)的框圖。詳細描述以下詳細描述參考各個附圖。只要可能,就在附圖和以下描述中使用相同的附圖 標(biāo)記來指示相同或類似的要素。盡管可能描述了本發(fā)明的各實施方式,但修改、改編和其他 實現(xiàn)也是可能的。例如,可以對附圖中所示出的要素進行置換、添加、或修改,且可以通過對 所公開的方法置換、重新排序、或添加階段來修改此處所描述的方法。因此,以下詳細描述并不限制本發(fā)明。相反,本發(fā)明的正確范圍由所附權(quán)利要求書確定。圖1示出了用于通過多個處理器110來計算電子表格105的電子表格計算系統(tǒng) 100。例如,電子表格應(yīng)用程序(例如,如將在下文中參考圖9更詳細地描述的電子表格應(yīng)用 程序920)可將數(shù)據(jù)組織成由列和行定義的單元格。用戶可例如通過公式來對數(shù)據(jù)采取動 作以給出所需結(jié)果。對用戶可用的某些公式(即,標(biāo)準函數(shù))可由電子表格應(yīng)用程序的開 發(fā)者來定義。除了標(biāo)準函數(shù)之外,電子表格應(yīng)用程序的開發(fā)者可允許無代碼用戶定義函數(shù) (UDF)。根據(jù)本發(fā)明的各實施例,無代碼UDF可包括其中用戶可以在單個函數(shù)(例如,由該 用戶定義)中封裝可跨電子表格105中的大單元格區(qū)域的模型的特征。無代碼UDF可包括 或以其他方式包含由電子表格應(yīng)用程序的開發(fā)者提供的標(biāo)準函數(shù)并且也可包括對其他UDF 的調(diào)用。在定義無代碼UDF時,用戶可指定可涵蓋模型的電子表格部分以及輸入單元格和 輸出單元格位置。然后可以例如從任何其他公式調(diào)用函數(shù)。根據(jù)本發(fā)明的各實施例,多線程計算可包括其中執(zhí)行電子表格的計算的計算工作 在多個處理器(例如,多個處理器110)之間劃分的特征。該劃分可允許每一個處理器(例 如,第一處理器115、第二處理器120、以及第三處理器125)執(zhí)行某一計算工作部分。通過 在多個處理器110之間劃分計算工作,可以在比用單個處理器更少的時間內(nèi)計算電子表格 105。此外,多線程計算可對可以在電子表格計算期間執(zhí)行的任何函數(shù)施加限制。例如,多 線程計算可以是“線程安全”的。線程安全多線程計算可以不干擾多個處理器中的執(zhí)行相 同或不同任務(wù)的其他處理器。根據(jù)本發(fā)明的各實施例,無代碼UDF可以在在多線程計算期 間運行時起作用。此外,本發(fā)明的各實施例可包括附加元素,包括如下文中更詳細地描述的 ARGUMENT (自變量)函數(shù)和向量化支持。圖2示出了跨電子表格200中的由例如用戶指定的部分以及所指定的輸入和輸出 單元格的無代碼UDF。圖2的示例無代碼UDF可將數(shù)量從一個單位制換算到另一個單位制。 如圖2所示,用戶可指定無代碼UDF被包含在范圍Al :G4中,或者可指定無代碼UDF包括整 個電子表格。用戶可將A2、B2和C2指定為輸入單元格,并將A4指定為輸出單元格。圖2 的示例無代碼UDF中的其他單元格可包括無代碼UDF的“計算模式”。用戶可將圖2的無代 碼UDF命名為“CONVERT (換算)”。圖3示出了可調(diào)用在圖2中定義的無代碼UDF的電子表格300。如圖3所示, 在圖2所示的無代碼UDF范圍之外,在例如另一表上,用戶可使用以上參考圖2定義的 "CONVERT"UDF來輸入若干公式。在執(zhí)行電子表格300時,電子表格應(yīng)用程序920可以在電 子表格300調(diào)用圖2中所定義的無代碼UDF時操縱電子表格200的輸入單元格中的數(shù)據(jù)。 然而,當(dāng)完成電子表格200時,電子表格應(yīng)用程序920可將電子表格200置回在操縱電子表 格200的輸入單元格中的數(shù)據(jù)之前發(fā)現(xiàn)的狀態(tài)。另外,可以存在對C00NVERT UDF的許多調(diào) 用。因為電子表格應(yīng)用程序920可提供多線程計算,所以可以同時對CONVERT UDF的調(diào)用 中的若干個求值。因此,若干個同時調(diào)用不應(yīng)彼此干擾。圖4是闡明根據(jù)本發(fā)明的各實施例的用于提供多線程無代碼UDF的方法400中所 涉及的各概略階段的流程圖。方法400可使用如將在以下參考圖9更詳細地描述的計算設(shè) 備900來實現(xiàn)。以下將更詳細地描述實現(xiàn)方法400的各階段的方式。方法400可開始于起 始框405并繼續(xù)至階段410,在那里計算設(shè)備900可以從對應(yīng)于調(diào)用無代碼UDF的電子表格 (例如,電子表格105)的計算線程接收至少一個輸入值。例如,為了執(zhí)行無代碼UDF(例如,圖2或圖5的無代碼UDF),電子表格應(yīng)用程序920可以i)將來自無代碼UDF的調(diào)用者的 輸入值放入無代碼UDF的輸入單元格中;ii)計算無代碼UDF區(qū)域中取決于(例如,直接或 間接)無代碼UDF的輸入單元格的所有公式;以及iii)從無代碼電UDF的輸出單元格取得 值并將該輸出單元格值返回給無代碼UDF的調(diào)用者。從其中計算設(shè)備900接收至少一個輸入值的階段410,方法400可繼續(xù)至階段 420,在那里計算設(shè)備900可將該至少一個輸入值保存在包含無代碼UDF的UDF存儲區(qū)域之 外的線程存儲區(qū)域中。例如,因為可能不期望重寫已經(jīng)在無代碼UDF的輸入單元格中的實 際值,所以本發(fā)明的各實施例可改為將這些輸入值存儲在其中電子表格應(yīng)用程序920可以 知道以便在需要輸入值時查找這些輸入值的單獨位置(例如,線程存儲區(qū)域),而不是將輸 入值直接放置在無代碼UDF的輸入單元格(例如,UDF存儲區(qū)域)中。此外,因為無代碼UDF 可以在多線程計算期間對于各單獨的線程上的不同的輸入一次執(zhí)行多次,所以對于這些輸 入可以存在多個存儲位置,例如每一計算線程一個。當(dāng)電子表格應(yīng)用程序920需要查找輸 入單元格的值時,電子表格應(yīng)用程序920能夠確定從哪一個存儲位置取得該值?!┯嬎阍O(shè)備900在階段420中保存至少一個輸入值,方法400就可繼續(xù)至階段 430,在那里計算設(shè)備900可執(zhí)行無代碼UDF,包括使用無代碼UDF中的至少一個公式以及來 自線程存儲區(qū)域的至少一個輸入值來執(zhí)行至少一個計算。例如,為了計算無代碼UDF區(qū)域 中直接或間接取決于輸入單元格的所有公式,如上所述,電子表格應(yīng)用程序920可能需要 知道要計算哪些公式。圖5示出了跨由例如用戶指定的電子表格500的一部分的、用于計 算在正態(tài)曲線的一部分下的面積的無代碼UDF。如電子表格500所示,輸入單元格可以是 A2和B2,輸出單元格可以是B8,并且用戶已經(jīng)指定該UDF跨整個電子表格500。電子表格 500中的其他單元格可包括用于電子表格500的“計算模式”。然而,單元格B6可以不取決 于任何輸入單元格。因此,可能沒有理由在每一次調(diào)用圖5的UDF時計算B6。同樣,B5可 以不取決于任何輸入單元格,但可包括易失性“RAND(隨機)”函數(shù)。因為它是易失性的,所 以電子表格應(yīng)用程序920可以在每一次對圖5的UDF求值時重新計算RAND函數(shù)。因此,可 以在對UDF求值時計算的公式的列表包括UDF區(qū)域中具有以下特性的所有公式i)直接或 間接取決于一個或多個輸入單元格;或者ii)是易失性的,或取決于另一易失性公式。如圖5所示,可以在對UDF求值時計算的公式的列表可包括單元格B4、B5、B7和 B8中的公式。該列表對于每一次對圖5的無代碼UDF求值可以是相同的。因此,該列表可 以存儲在與該無代碼UDF相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)中,該數(shù)據(jù)結(jié)構(gòu)可以在用戶定義UDF時創(chuàng)建并 且可以不改變,除非用戶改變該UDF的定義。無需為不同的計算線程存在該結(jié)構(gòu)的分開的 各個副本。輸入單元格和輸出單元格的列表同樣可以存儲在該可被稱為按UDF數(shù)據(jù)結(jié)構(gòu)的 數(shù)據(jù)結(jié)構(gòu)中。圖6示出了用于如以上參考圖5描述的正態(tài)曲線UDF的按UDF數(shù)據(jù)結(jié)構(gòu)600。此外,圖5的無代碼UDF中的公式可以按特定次序求值。例如,B4和B5可以在B7 之前求值,而B7可以在B8之前求值。在特定情況下(不在該示例中),可以對公式求值的 次序可取決于輸入值。例如,如果兩個計算線程正在用不同的輸入值對相同的無代碼UDF 求值,則這兩個計算線程需要以不同的次序?qū)角笾凳强赡艿?。因此,可以對公式求值?次序是可以存儲在正在評估UDF調(diào)用的線程所擁有的數(shù)據(jù)結(jié)構(gòu)中的信息。這可被稱為按調(diào) 用數(shù)據(jù)結(jié)構(gòu)。圖7示出了用于以上參考圖5所描述的正態(tài)曲線UDF的按調(diào)用數(shù)據(jù)結(jié)構(gòu)700。當(dāng)公式求值要求取得來自一單元格的值時,可使用一過程來知道該單元格是否是
7輸入單元格或包含參與該UDF的公式,并且如果是,則知道哪一個輸入單元格或哪一個公 式與該UDF相關(guān)。例如,在如以上參考圖5所描述的正態(tài)曲線示例中,B4可以涉及A2。在 對B4中的公式求值時,電子表格應(yīng)用程序920可嘗試從A2取值。因為電子表格應(yīng)用程序 920可能需要知道A2可以是該UDF的第一個輸入單元格,所以電子表格應(yīng)用程序920可取 得傳遞至對該UDF的特定調(diào)用中的第一個參數(shù),而不是從該單元格本身取值。因此,當(dāng)用戶 創(chuàng)建UDF時,電子表格應(yīng)用程序920可創(chuàng)建按單元格數(shù)據(jù)結(jié)構(gòu)并將其鏈接到實際單元格。如 同按UDF數(shù)據(jù)結(jié)構(gòu),按單元格數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)可保持不變,除非用戶改變UDF的定義。因此, 無需為每一個線程存在這些數(shù)據(jù)結(jié)構(gòu)的單獨實例。圖8示出了用于圖5的正態(tài)曲線UDF示例的按單元格數(shù)據(jù)結(jié)構(gòu)800。如圖8所示, 當(dāng)計算線程試圖從單元格A2取值時,可以看到A2對應(yīng)于正態(tài)曲線UDF的第一個輸入。該 線程然后可檢查它是否當(dāng)前正在對該正態(tài)曲線UDF求值,并且如果是,則可取得對該調(diào)用 的第一個輸入,該輸入本身被存儲在按調(diào)用數(shù)據(jù)結(jié)構(gòu)中。如果線程當(dāng)前未對正態(tài)曲線UDF 求值,則該線程可以照常從該單元格取值。一旦電子表格應(yīng)用程序920已經(jīng)計算了該UDF 的所有公式,就可從指定輸出單元格獲得結(jié)果。在以上正態(tài)曲線示例中,輸出單元格可以是 B8。在從B8取值后,電子表格應(yīng)用程序920可以看到B8對應(yīng)于該UDF中的第四個公式并 且因此可使用存儲在按調(diào)用數(shù)據(jù)結(jié)構(gòu)中用于該公式的結(jié)果。在計算設(shè)備900在階段430中執(zhí)行無代碼UDF后,方法400可繼續(xù)至階段440,在 那里計算設(shè)備900可將響應(yīng)于執(zhí)行無代碼UDF而產(chǎn)生的至少一個輸出值返回給對應(yīng)于調(diào)用 該無代碼UDF的電子表格的計算線程。例如,電子表格應(yīng)用程序920可從無代碼UDF的輸 出單元格取值并將其輸出單元格值返回給該無代碼UDF的調(diào)用者。結(jié)果,無代碼UDF求值 可以是線程安全的,因為可能在該UDF的求值期間改變的所有數(shù)據(jù)都可以存儲在可由對該 UDF求值的線程所擁有的按調(diào)用數(shù)據(jù)結(jié)構(gòu)的實例中。沒有其他線程可查看該數(shù)據(jù)結(jié)構(gòu)實例。 如果多個線程正在同時對相同的無代碼UDF求值,則每一個線程可具有其自己的按調(diào)用數(shù) 據(jù)結(jié)構(gòu)的實例。因此,沒有一個線程可以干擾任何其他線程。此外,如果存在沒有對無代碼 UDF求值,但需要從參與無代碼UDF的單元格取值的另一線程,則該線程能夠直接從該單元 格取值。同樣,正在對無代碼UDF求值的線程可以不干擾沒有對該UDF求值的線程。一旦 計算設(shè)備900在階段440中返回至少一個輸出值,方法400然后就可在階段450處結(jié)束。根據(jù)本發(fā)明的各實施例,除了使用指定輸入單元格之外,無代碼UDF可具有取得 被傳遞至對UDF的特定調(diào)用的自變量的另一種方式,即“ARGUMENT(自變量)”函數(shù)。例如, 調(diào)用ARGUMENT(n)可取得UDF調(diào)用的第η個自變量。這可以是有用的,因為它可返回數(shù)組 或單元格引用。因此,如果只使用輸入單元格來傳遞自變量,則可能無法向UDF傳遞數(shù)組或 單元格引用。例如,用戶可能想要創(chuàng)建被稱為“AREASIZE(區(qū)域大小),,的、可取得區(qū)域引用并 返回該區(qū)域中的單元格的計數(shù)的無代碼UDF0在不使用ARGUMENT函數(shù)的情況下,創(chuàng)建這一 UDF不是不可能。在使用ARGUMENT函數(shù)的情況下,可以例如使用以下公式來創(chuàng)建AREASIZE UDF = ROWS (行)(ARGUMENT (1)) ^COLUMNS (列)(ARGUMENT (1))根據(jù)本發(fā)明的各實施例,可提供向量化。向量化可以指向數(shù)組中的每一個成員單 獨地應(yīng)用運算。例如,考慮以下輸入數(shù)組的公式
8
{ = SUM (SIN (Al :A10))}電子表格應(yīng)用程序920可以對區(qū)域Al =AlO中的每一個條目執(zhí)行“SIN(正弦)”函 數(shù)并創(chuàng)建包含這些SIN函數(shù)的所有結(jié)果的數(shù)組。該數(shù)組然后可被傳遞至合計數(shù)組并返回單 個值的“SUM(求和)”函數(shù)。因此,如果電子表格應(yīng)用程序920知道所述運算并非旨在作用 于值的數(shù)組,則該應(yīng)用程序可執(zhí)行向量化。例如,考慮以下輸入數(shù)組的公式{ = SUM (Al :A10)}電子表格應(yīng)用程序920可以不為范圍Al :A10中的每一個值調(diào)用一次SUM函數(shù),因 為電子表格應(yīng)用程序920可以知道該SUM函數(shù)可以將數(shù)組當(dāng)作自變量。因此,電子表格應(yīng) 用程序920可只調(diào)用一次SUM函數(shù)并將整個數(shù)組作為自變量來傳遞。為了使無代碼UDF能夠利用向量化,可以存在供創(chuàng)建該UDF的用戶指定自變量是 能夠取數(shù)組和區(qū)域引用還是只能夠取個別值的方式。例如,實現(xiàn)雙曲正弦函數(shù)(SINH)的無 代碼UDF可指定它只取個別值,并因此進行電子表格應(yīng)用程序920的向量化行為。執(zhí)行某 種類型的合計的無代碼UDF可指定它取數(shù)組和區(qū)域引用,并因此可以不進行電子表格應(yīng)用 程序920的向量化行為。根據(jù)本發(fā)明的各實施例,無代碼UDF可以在創(chuàng)建該UDF后允許用 戶為每一個自變量指定該自變量是能夠取數(shù)組和區(qū)域應(yīng)用還是只能夠取個別值。根據(jù)本發(fā)明的一實施例可包括用于提供無代碼用戶定義函數(shù)(UDF)的系統(tǒng)。該系 統(tǒng)可包括存儲器存儲和耦合到該存儲器存儲的處理單元。該處理單元可用于從對應(yīng)于調(diào)用 無代碼UDF的電子表格的計算線程接收至少一個輸入值。另外,該處理單元可用于將該至 少一個輸入值保存在包含無代碼UDF的UDF存儲區(qū)域之外的線程存儲區(qū)域中。此外,處理 單元可用于可執(zhí)行無代碼UDF,包括使用無代碼UDF中的至少一個公式以及來自線程存儲 區(qū)域的至少一個輸入值來執(zhí)行至少一個計算。而且,該處理單元可用于將響應(yīng)于執(zhí)行無代 碼UDF而產(chǎn)生的至少一個輸出值返回到對應(yīng)于調(diào)用該無代碼UDF的電子表格的計算線程。根據(jù)本發(fā)明的另一實施例可包括用于提供無代碼用戶定義函數(shù)(UDF)的系統(tǒng)。該 系統(tǒng)可包括存儲器存儲和耦合到該存儲器存儲的處理單元。該處理單元可用于分別從對應(yīng) 于調(diào)用無代碼UDF的電子表格的多個計算線程接收多個輸入值。同樣,該處理單元可用于 將該多個輸入值分別保存在多個線程存儲區(qū)域中。該多個線程存儲區(qū)域中的每一個都可以 在包含無代碼UDF的UDF存儲區(qū)域之外。對于該多個輸入值中的每一個,處理單元可用于 i)從所保存的多個輸入值中取得輸入值;ii)執(zhí)行無代碼UDF,包括使用無代碼UDF中的多 個公式以及所取得的輸入值來執(zhí)行計算;以及iii)將響應(yīng)于執(zhí)行無代碼UDF而產(chǎn)生的至少 一個輸出值返回給對應(yīng)于所取得的輸入值的計算線程。根據(jù)本發(fā)明的又一實施例可包括用于提供無代碼用戶定義函數(shù)(UDF)的系統(tǒng)。該 系統(tǒng)可包括存儲器存儲和耦合到該存儲器存儲的處理單元。該處理單元可用于將至少一個 輸入值保存在包含無代碼UDF的UDF存儲區(qū)域之外的線程存儲區(qū)域中。該至少一個輸入值 可以與對應(yīng)于調(diào)用無代碼UDF的電子表格的計算線程相對應(yīng)。另外,該處理單元可用于可 執(zhí)行無代碼UDF,包括該處理單元可用于使用無代碼UDF中的至少一個公式以及來自線程 存儲區(qū)域的至少一個輸入值來執(zhí)行至少一個計算。該處理單元可用于使用至少一個公式來 執(zhí)行至少一個計算可包括該處理單元可用于響應(yīng)于該處理單元確定在按UDF數(shù)據(jù)結(jié)構(gòu)中 標(biāo)識出該至少一個公式而使用該至少一個公式來執(zhí)行至少一個計算。該按UDF數(shù)據(jù)結(jié)構(gòu)可 標(biāo)識無代碼UDF中的具有以下特性中的至少一個的公式直接取決于無代碼UDF中的至少間接取決于無代碼UDF中的至少一個輸入單元格、是易失性的、以及取決 于無代碼UDF中的其他易失性公式。該處理單元可用于執(zhí)行無代碼UDF可包括該處理單元 可用于以由按調(diào)用數(shù)據(jù)結(jié)構(gòu)定義的次序執(zhí)行無代碼UDF。此外,該處理單元可用于將響應(yīng)于 該處理單元執(zhí)行無代碼UDF而產(chǎn)生的至少一個輸出值返回到對應(yīng)于調(diào)用該無代碼UDF的電 子表格的計算線程。圖9是包括計算設(shè)備900的系統(tǒng)的框圖。根據(jù)本發(fā)明的一個實施方式,上述存儲 器存儲和處理單元可以在諸如圖9的計算設(shè)備900等計算設(shè)備中實現(xiàn)??梢允褂糜布?、軟 件或固件的任何合適的組合來實現(xiàn)該存儲器存儲和處理單元。例如,存儲器存儲和處理單 元可以用計算設(shè)備900或結(jié)合計算設(shè)備900的其他計算設(shè)備918中的任意一個來實現(xiàn)。根 據(jù)本發(fā)明的各實施方式,上述系統(tǒng)、設(shè)備和處理器是示例,而其他系統(tǒng)、設(shè)備和處理器可以 包括上述存儲器存儲和處理單元。此外,計算設(shè)備900可包括用于上述系統(tǒng)100的操作環(huán) 境。系統(tǒng)100可以在其他環(huán)境中操作并且不限于計算設(shè)備900。參考圖9,根據(jù)本發(fā)明的一實施方式的系統(tǒng)可包括計算設(shè)備,諸如計算設(shè)備900。 在一基本配置中,計算設(shè)備900可以包括至少一個處理單元902和系統(tǒng)存儲器904。處理 單元902 (例如,多個處理器110)可包括多個處理器(例如,第一處理器115、第二處理器 120、以及第三處理器125)。取決于計算設(shè)備的配置和類型,系統(tǒng)存儲器904可以包括,但 不限于,易失性存儲器(例如,隨機存取存儲器(RAM))、非易失性存儲器(例如,只讀存儲 器(ROM))、閃存或任何組合。系統(tǒng)存儲器904可以包括操作系統(tǒng)905、一個或多個編程模塊 906,且可以包括程序數(shù)據(jù)907和電子表格105。例如,操作系統(tǒng)905可適用于控制計算設(shè)備 900的操作。在一個實施例中,編程模塊906可包括電子表格應(yīng)用程序920。此外,本發(fā)明 的各實施方式可以結(jié)合圖形庫、其他操作系統(tǒng)、或任何其他應(yīng)用程序來實踐,且不限于任何 特定應(yīng)用程序或系統(tǒng)。該基本配置在圖9中由虛線908內(nèi)的組件示出。計算設(shè)備900還可具有附加特征或功能。例如,計算設(shè)備900還可包括附加數(shù)據(jù) 存儲設(shè)備(可移動和/或不可移動),諸如,例如磁盤、光盤或磁帶。這些附加存儲在圖9中 由可移動存儲909和不可移動存儲910示出。計算機存儲介質(zhì)可包括以用于存儲諸如計算 機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的任何方法或技術(shù)實現(xiàn)的易失性和非 易失性、可移動和不可移動介質(zhì)。系統(tǒng)存儲器904、可移動存儲909和不可移動存儲910都 是計算機存儲介質(zhì)的示例(即,存儲器存儲)。計算機存儲介質(zhì)可以包括,但不限于,RAM、 ROM、電可擦除只讀存儲器(EEPROM)、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD) 或其它光存儲、磁帶盒、磁帶、磁盤存儲或其它磁性存儲設(shè)備、或可用于存儲信息且可以由 計算設(shè)備900訪問的任何其它介質(zhì)。任何這樣的計算機存儲介質(zhì)都可以是設(shè)備900的一部 分。計算設(shè)備900還可以具有輸入設(shè)備912,如鍵盤、鼠標(biāo)、筆、聲音輸入設(shè)備、觸摸輸入設(shè)備 等。還可包括諸如顯示器、揚聲器、打印機等輸出設(shè)備914。上述設(shè)備是示例且可以使用其 他設(shè)備。計算設(shè)備900還可包含可允許設(shè)備900諸如通過例如內(nèi)聯(lián)網(wǎng)或因特網(wǎng)等分布式計 算環(huán)境中的網(wǎng)絡(luò)來與其他計算設(shè)備918進行通信的通信連接916。通信連接916是通信介 質(zhì)的一個示例。通信介質(zhì)通常由諸如載波或其他傳輸機制等已調(diào)制數(shù)據(jù)信號中的計算機可 讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)來體現(xiàn),并包括任何信息傳遞介質(zhì)。術(shù)語“已調(diào)制數(shù) 據(jù)信號”可以描述以對該信號中的信息進行編碼的方式設(shè)定或者改變其一個或多個特征的
10信號。作為示例而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接線連接等有線介質(zhì),以及諸如 聲學(xué)、射頻(RF)、紅外線和其他無線介質(zhì)等無線介質(zhì)。如此處所使用的術(shù)語“計算機可讀介 質(zhì)“可以包括存儲介質(zhì)和通信介質(zhì)兩者。如上所述,可以在系統(tǒng)存儲器904中存儲包括操作系統(tǒng)905在內(nèi)的多個程序模塊 和數(shù)據(jù)文件。當(dāng)在處理單元902上執(zhí)行時,編程模塊906 (例如,電子表格應(yīng)用程序920)可 執(zhí)行各過程,包括例如,如上所述的一個或多個方法400的各階段。前述進程是示例,且處 理單元902可執(zhí)行其他進程。根據(jù)本發(fā)明的各實施方式可以使用的其他編程模塊可以包括 電子郵件和聯(lián)系人應(yīng)用程序、文字處理應(yīng)用程序、電子表格應(yīng)用程序、數(shù)據(jù)庫應(yīng)用程序、幻 燈片演示應(yīng)用程序、繪圖或計算機輔助應(yīng)用程序等。一般而言,根據(jù)本發(fā)明的各實施方式,程序模塊可以包括可以執(zhí)行特定任務(wù)或可 以實現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和其他類型的結(jié)構(gòu)。此外,本發(fā)明的 各實施方式可用其他計算機系統(tǒng)配置來實踐,包括手持式設(shè)備、多處理器系統(tǒng)、基于微處理 器的系統(tǒng)或可編程消費電子產(chǎn)品、小型機、大型計算機等。本發(fā)明的各實施方式也可以在其 中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠程處理設(shè)備執(zhí)行的分布式計算環(huán)境中實現(xiàn)。在分布式計算 環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備中。此外,本發(fā)明的各實施方式可在包括分立電子元件的電路、包含邏輯門的封裝或 集成電子芯片、利用微處理器的電路、或在包含電子元件或微處理器的單個芯片上實現(xiàn)。本 發(fā)明的各實施方式還可以使用能夠執(zhí)行諸如,例如,AND(與)、0R(或)和NOT(非)等邏輯 運算的其他技術(shù)來實踐,包括但不限于,機械、光學(xué)、流體和量子技術(shù)。另外,本發(fā)明的各實 施方式可以在通用計算機或任何其他電路或系統(tǒng)中實現(xiàn)。例如,本發(fā)明的各實施方式可被實現(xiàn)為計算機進程(方法)、計算系統(tǒng)或諸如計算 機程序產(chǎn)品或計算機可讀介質(zhì)等制品。計算機程序產(chǎn)品可以是計算機系統(tǒng)可讀并編碼了用 于執(zhí)行計算機過程的指令的計算機程序的計算機存儲介質(zhì)。計算機程序產(chǎn)品還可以是計算 系統(tǒng)可讀并編碼了用于執(zhí)行計算機過程的指令的計算機程序的載體上的傳播信號。因此, 本發(fā)明能以硬件和/或軟件(包括固件、常駐軟件、微碼等)來具體化。換言之,本發(fā)明的 各實施方式可以采用其上包含有供指令執(zhí)行系統(tǒng)使用或結(jié)合其使用的計算機可使用或計 算機可讀程序代碼的計算機可使用或計算機可讀存儲介質(zhì)上的計算機程序產(chǎn)品的形式。計 算機可使用或計算機可讀介質(zhì)可以是可包含、存儲、通信、傳播、或傳輸程序以供指令執(zhí)行 系統(tǒng)、裝置或設(shè)備使用或結(jié)合其使用的任何介質(zhì)。計算機可使用或計算機可讀介質(zhì)可以是,例如,但不限于,電、磁、光、電磁、紅外、 或半導(dǎo)體系統(tǒng)、裝置、設(shè)備或傳播介質(zhì)。更具體的計算機可讀介質(zhì)示例(非窮盡列表),計算 機可讀介質(zhì)可以包括以下具有一條或多條導(dǎo)線的電連接、便攜式計算機盤、隨機存取存儲 器(RAM)、只讀存儲器(ROM)、可擦除可編程只讀存儲器(EPR0M或閃存)、光纖、和便攜式壓 縮盤只讀存儲器(CD-ROM)。注意,計算機可使用或計算機可讀介質(zhì)甚至可以是其上打印有 程序的紙張或另一合適的介質(zhì),因為程序可以經(jīng)由例如對紙張或其他介質(zhì)的光學(xué)掃描而電 子地捕獲,隨后如有必要被編譯、解釋,或以其他合適的方式處理,并隨后存儲在計算機存 儲器中。以上參考例如根據(jù)本發(fā)明的各實施方式的方法、系統(tǒng)和計算機程序產(chǎn)品的框圖和 /或操作圖示描述了本發(fā)明的各實施方式??蛑兴⒚鞯母鞴δ?動作可以按不同于任何
11流程圖所示的次序出現(xiàn)。例如,取決于所涉及的功能/動作,連續(xù)示出的兩個框?qū)嶋H上可以 基本上同時執(zhí)行,或者這些框有時可以按相反的次序來執(zhí)行。盡管已經(jīng)描述了本發(fā)明的某些實施方式,但也可能存在其他實施方式。此外,雖 然本發(fā)明的各實施方式被描述為與存儲在存儲器和其他存儲介質(zhì)中的數(shù)據(jù)相關(guān)聯(lián),但數(shù)據(jù) 還可以被存儲在或讀取自其他類型的計算機可讀介質(zhì),如輔助存儲設(shè)備,像硬盤、軟盤、或 CD-ROM ;來自因特網(wǎng)的載波;或其他形式的RAM或ROM。此外,所公開的各方法的各階段可以 按任何方式來修改,包括通過對各階段重新排序和/或插入或刪除階段,而不背離本發(fā)明。包括此處所包括的代碼中的版權(quán)在內(nèi)的所有權(quán)利都歸屬于申請人并且是本申請 人的財產(chǎn)。申請人保持并保留此處所包括的代碼中的所有權(quán)利,并授予僅關(guān)于所授權(quán)的專 利的再現(xiàn)且未出于其他目的再現(xiàn)該材料的許可。雖然本說明書包括各示例,但本發(fā)明的范圍由所附權(quán)利要求書來指示。此外,盡管 用對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本說明書,但權(quán)利要求書并不限于上述特 征或動作。相反,上述具體特征和動作是作為本發(fā)明的各實施方式的示例來公開的。
權(quán)利要求
一種用于提供無代碼用戶定義函數(shù)(UDF)的方法(400),所述方法(400)包括從對應(yīng)于調(diào)用所述無代碼UDF的電子表格(105、200、300、500)的計算線程接收至少一個輸入值(410);將所述至少一個輸入值保存在包含所述無代碼UDF的UDF存儲區(qū)域之外的線程存儲區(qū)域中(420)執(zhí)行所述無代碼UDF(430),包括使用所述無代碼UDF中的至少一個公式以及來自所述線程存儲區(qū)域的至少一個輸入值來執(zhí)行至少一個計算;以及將響應(yīng)于執(zhí)行所述無代碼UDF而產(chǎn)生的至少一個輸出值返回給對應(yīng)于調(diào)用所述無代碼UDF的電子表格(105、200、300、500)的計算線程(440)。
2.如權(quán)利要求1所述的方法(400),其特征在于,還包括確定在按UDF數(shù)據(jù)結(jié)構(gòu)(600) 中標(biāo)識所述至少一個公式。
3.如權(quán)利要求2所述的方法(400),其特征在于,使用所述至少一個公式來執(zhí)行所述至 少一個計算(430)包括響應(yīng)于確定在所述按UDF數(shù)據(jù)結(jié)構(gòu)(600)中標(biāo)識所述至少一個公式 而使用所述至少一個公式來執(zhí)行所述至少一個計算。
4.如權(quán)利要求1所述的方法(400),其特征在于,使用所述至少一個公式來執(zhí)行所述至 少一個計算(430)包括響應(yīng)于確定在按UDF數(shù)據(jù)結(jié)構(gòu)(600)中標(biāo)識所述至少一個公式而使 用所述至少一個公式來執(zhí)行所述至少一個計算,其中所述按UDF數(shù)據(jù)結(jié)構(gòu)(600)標(biāo)識所述 無代碼UDF中的具有以下特性中的至少一個的公式直接取決于無代碼UDF中的至少一個 輸入單元格、間接取決于無代碼UDF中的至少一個輸入單元格、是易失性的、以及取決于無 代碼UDF中的其他易失性公式。
5.如權(quán)利要求1所述的方法(400),其特征在于,執(zhí)行所述無代碼UDF(430)包括以由 按調(diào)用數(shù)據(jù)結(jié)構(gòu)(600)定義的次序執(zhí)行所述無代碼UDF。
6.如權(quán)利要求1所述的方法(400),其特征在于,執(zhí)行所述無代碼UDF(430)包括以由 按調(diào)用數(shù)據(jù)結(jié)構(gòu)(600)定義的次序執(zhí)行所述無代碼UDF,所述按調(diào)用數(shù)據(jù)結(jié)構(gòu)(600)對于所 述計算線程是唯一的。
7.如權(quán)利要求1所述的方法(400),其特征在于,執(zhí)行所述無代碼UDF(430)包括從所述無代碼UDF中的單元格取值;以及使用按單元格數(shù)據(jù)結(jié)構(gòu)來確定以下各項中的一個所述單元格是否是所述無代碼UDF 的輸入單元格以及所述單元格是否包含參與所述無代碼UDF的公式。
8.如權(quán)利要求1所述的方法(400),其特征在于,使用所述至少一個公式來執(zhí)行所述至 少一個計算(430)包括使用所述至少一個公式來執(zhí)行所述至少一個計算,其中所述公式取 決于以下各項中的一個直接取決于所述無代碼UDF的至少一個輸入單元格以及間接取決 于所述無代碼UDF的至少一個輸入單元格。
9.如權(quán)利要求1所述的方法(400),其特征在于,執(zhí)行所述無代碼UDF(430)包括執(zhí)行 包括ARGUMENT函數(shù)的無代碼UDF。
10.如權(quán)利要求1所述的方法(400),其特征在于,執(zhí)行所述無代碼UDF(430)包括執(zhí)行 包括向量化的無代碼UDF,所述向量化包括向所述無代碼UDF中的數(shù)組的每一個成員單獨 地應(yīng)用運算。
11.一種存儲一組指令的計算機可讀介質(zhì),所述一組指令在被執(zhí)行時執(zhí)行一種用于提供無代碼用戶定義函數(shù)(UDF)的方法(400),由所述一組指令執(zhí)行的方法(400)包括分別從對應(yīng)于調(diào)用所述無代碼UDF的電子表格(105、200、300、500)的多個計算線程接 收多個輸入值(410)將所述多個輸入值分別保存在多個線程存儲區(qū)域中(420),所述多個線程存儲區(qū)域中 的每一個都在包含所述無代碼UDF的UDF存儲區(qū)域之外;以及對于所述多個輸入值中的每一個,從所保存的多個輸入值中取得輸入值,執(zhí)行所述無代碼UDF (430),包括使用所述無代 碼UDF中的多個公式以及所取得的輸入值來執(zhí)行計算,并且將響應(yīng)于執(zhí)行所述無代碼UDF而產(chǎn)生的至少一個輸出值返回給對應(yīng)于所取得的輸入 值的多個計算線程中的一個(440)。
12.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,還包括對于所述多個輸入值 中的每一個,確定在按UDF數(shù)據(jù)結(jié)構(gòu)(600)中標(biāo)識所述多個公式。
13.如權(quán)利要求12所述的計算機可讀介質(zhì),其特征在于,使用所述多個公式來執(zhí)行所 述計算(430)包括響應(yīng)于確定在所述按UDF數(shù)據(jù)結(jié)構(gòu)(600)中標(biāo)識所述多個公式而使用所 述多個公式來執(zhí)行所述計算。
14.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,使用所述多個公式來執(zhí)行所 述計算(430)包括響應(yīng)于確定在所述按UDF數(shù)據(jù)結(jié)構(gòu)(600)中標(biāo)識所述多個公式而使用所 述多個公式來執(zhí)行所述計算,其中所述按UDF數(shù)據(jù)結(jié)構(gòu)(600)標(biāo)識所述無代碼UDF中的具 有以下特性中的至少一個的公式直接取決于無代碼UDF中的至少一個輸入單元格、間接 取決于無代碼UDF中的至少一個輸入單元格、是易失性的、以及取決于無代碼UDF中的其他 易失性公式。
15.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,執(zhí)行所述計算包括以由按調(diào) 用數(shù)據(jù)結(jié)構(gòu)(600)定義的次序執(zhí)行所述計算。
16.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,執(zhí)行所述計算(430)包括以由 按調(diào)用數(shù)據(jù)結(jié)構(gòu)(600)定義的次序執(zhí)行所述計算,所述按調(diào)用數(shù)據(jù)結(jié)構(gòu)(600)對于對應(yīng)于 所取得的輸入值的計算線程是唯一的。
17.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,使用所述無代碼UDF中的多個 公式來執(zhí)行所述計算(430)包括使用所述無代碼UDF中的多個公式來執(zhí)行所述計算,其中 所述多個公式中的公式取決于以下各項中的一個直接取決于所述無代碼UDF的至少一個 輸入單元格以及間接取決于所述無代碼UDF的至少一個輸入單元格。
18.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,執(zhí)行所述無代碼UDF(430)包 括執(zhí)行包括ARGUMENT函數(shù)的無代碼UDF0
19.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,執(zhí)行所述無代碼UDF(430)包 括執(zhí)行包括向量化的無代碼UDF,所述向量化包括向所述無代碼UDF中的數(shù)組的每一個成 員單獨地應(yīng)用運算。
20.一種用于提供無代碼用戶定義函數(shù)(UDF)的系統(tǒng),所述系統(tǒng)包括存儲器存儲;以及耦合到所述存儲器存儲的處理單元,其中所述處理單元可用于將至少一個輸入值保存在包含所述無代碼UDF的UDF存儲區(qū)域之外的線程存儲區(qū)域中(420),所述至少一個輸入值與對應(yīng)于調(diào)用所述無代碼UDF的電子表格(105、200、300、500) 的計算線程相對應(yīng);執(zhí)行所述無代碼UDF(430),包括所述處理單元可用于使用所述無代碼UDF中的至少一 個公式以及來自所述線程存儲區(qū)域的至少一個輸入值來執(zhí)行至少一個計算,其中所述處理 單元可用于使用所述至少一個公式來執(zhí)行所述至少一個計算包括所述處理單元可用于響 應(yīng)于所述處理單元確定在按UDF數(shù)據(jù)結(jié)構(gòu)(600)中標(biāo)識所述至少一個公式而使用所述至少 一個公式來執(zhí)行所述至少一個計算,其中所述按UDF數(shù)據(jù)結(jié)構(gòu)(600)標(biāo)識所述無代碼UDF 中的具有以下特性中的至少一個的公式直接取決于所述無代碼UDF中的至少一個輸入單 元格、間接取決于所述無代碼UDF中的至少一個輸入單元格、是易失性的、以及取決于所述 無代碼UDF中的其他易失性公式,并且其中所述處理單元可用于執(zhí)行所述無代碼UDF包括 所述處理單元可用于以由按調(diào)用數(shù)據(jù)結(jié)構(gòu)(600)定義的次序執(zhí)行所述無代碼UDF;以及將響應(yīng)于所述處理單元執(zhí)行所述無代碼UDF而產(chǎn)生的至少一個輸出值返回給對應(yīng)于 調(diào)用所述無代碼UDF的電子表格(105、200、300、500)的計算線程(440)。
全文摘要
可提供一種多線程無代碼用戶定義函數(shù)(UDF)。首先,可以從對應(yīng)于調(diào)用無代碼UDF的電子表格的計算線程接收至少一個輸入值。然后,可將該至少一個輸入值保存在包含無代碼UDF的UDF存儲區(qū)域之外的線程存儲區(qū)域中。接著,可執(zhí)行無代碼UDF,包括使用無代碼UDF中的至少一個公式以及來自線程存儲區(qū)域的至少一個輸入值來執(zhí)行至少一個計算。然后可將響應(yīng)于執(zhí)行無代碼UDF而產(chǎn)生的至少一個輸出值返回到對應(yīng)于調(diào)用該無代碼UDF的電子表格的計算線程。
文檔編號G06F17/21GK101918944SQ200880123212
公開日2010年12月15日 申請日期2008年11月26日 優(yōu)先權(quán)日2007年12月26日
發(fā)明者A·J·貝克, C·D·埃利斯, J·J·杜扎克, J·M·切爾羅弗 申請人:微軟公司