Spread的公式計(jì)算引擎支持300多種內(nèi)置函數(shù),并支持通過內(nèi)置函數(shù)和運(yùn)算符來自定義公式。支持的函數(shù)包括日期、時(shí)間函數(shù)、工程計(jì)算函數(shù)、財(cái)務(wù)計(jì)算函數(shù)、邏輯函數(shù)、數(shù)學(xué)和三角函數(shù)、統(tǒng)計(jì)函數(shù)、文本函數(shù)等。 公式計(jì)算引擎支持單元格的引用、表單的交叉引用、循環(huán)引用、函數(shù)嵌套等。 放置公式在單元格中你可以添加一個(gè)公式到一個(gè)單元格或單元格區(qū)域內(nèi)。 你還可以向一行或者一列中所有的單元格添加公式。該公式是一個(gè)具有說明公式字符串的公式,通常是包含一個(gè)函數(shù),運(yùn)算符和常數(shù)的集合體。 當(dāng)把一個(gè)公式分配到行或列的時(shí)候,這個(gè)公式為每一個(gè)行或列的單元格所用(假設(shè)該公式?jīng)]有在單元格級(jí)別上被覆蓋)。對(duì)于在一行或者一列中的公式,Spread使用行或列中的第一個(gè)單元格為基準(zhǔn)位置。如果你使用相對(duì)尋址,這個(gè)公式為列A中的每一個(gè)單元格進(jìn)行測(cè)算,每一個(gè)單元格中都有一個(gè)不同的結(jié)果 。如果你想要列A中每一個(gè)單元格對(duì)C2和D2的值的和進(jìn)行計(jì)算(而不是C列和D列中每一個(gè)單元格的值進(jìn)行計(jì)算),那么你就可以使用公式$C$2+$D$2,它使用了絕對(duì)地址。 你可以通過指定該對(duì)象的Formula屬性來添加一個(gè)公式。 下面已經(jīng)給出使用代碼的步驟。 當(dāng)你使用Cells對(duì)象的Text屬性對(duì)單元格進(jìn)行賦值時(shí),表單使用單元格類型將一個(gè)指定的字符串轉(zhuǎn)換為需要的數(shù)據(jù)類型。舉例來說,一個(gè)數(shù)字單元格類型將字符串轉(zhuǎn)換為雙精度浮點(diǎn)數(shù)數(shù)據(jù)類型。當(dāng)你使用Cells對(duì)象的Value屬性對(duì)單元格進(jìn)行賦值時(shí),表單根據(jù)原樣接受賦值的對(duì)象并且不會(huì)進(jìn)行解析。因此如果你使用一個(gè)值進(jìn)行設(shè)置,它仍然會(huì)是字符串。一些計(jì)算的函數(shù)(舉例來說,SUM)忽視了單元格區(qū)域中的非數(shù)字的值。舉例來說,如果單元格區(qū)域A1:A3包含數(shù)值{1,“2”,3},那么公式SUM{A1:A3}計(jì)算的結(jié)果為4因?yàn)镾UM函數(shù)忽略了字符串“2”。請(qǐng)確定你正確的設(shè)置了每一個(gè)單元格的數(shù)字,這些數(shù)字用于公式的計(jì)算中并且你已經(jīng)將其設(shè)置為正確的數(shù)據(jù)類型。 下面的這個(gè)示例顯示了如何指定一個(gè)公式,找到第一個(gè)單元格的值的五十倍的結(jié)果,并且將結(jié)果放入另一單元格中。然后,它可以求得一個(gè)單元格區(qū)域的總和 (A1到A4)并且將結(jié)果放入第三列的每一個(gè)單元格中。
公式中的單元格引用除了數(shù)值,運(yùn)算符,以及函數(shù)之外,一個(gè)公式還可以包括其它單元格值的引用。舉例來說,要查找兩個(gè)單元格的值的總和,該公式可以通過行和列查找到單元格的坐標(biāo)。 你可以使用絕對(duì)單元格引用(根據(jù)行和列的實(shí)際坐標(biāo))或相對(duì)單元格引用(相對(duì)于當(dāng)前單元格的坐標(biāo))。你可以使用ReferenceStyle屬性,選擇對(duì)表單使用哪種類型的單元格引用。一個(gè)公式不能同時(shí)包含絕對(duì)單元格引用和相對(duì)單元格引用。如果你已經(jīng)將單元格引用樣式變成不能顯示公式的樣式,Spread控件向公式提供一個(gè)問號(hào)作為占位符以代表不能顯示的單元格引用。 下表包含若干個(gè)示例,它們有效地使用了公式的引用:
如果你在單元格B1的公式中定義相對(duì)單元格引用 為RC[-1]+R[-1]C,則公式將被解析為左邊的(A1)單元格的 值加到上面的單元格(“B0“)的值當(dāng)中去。 控件會(huì)將單元格"B0" 的值看作空的單元格。如果你更改單元格引用樣式風(fēng)格為A1的樣式,公式會(huì)變?yōu)锳1+B? ,因?yàn)锳1的樣式不能表示單元格"B0"。然而,控件仍認(rèn)為公式會(huì)使用R1C1引用樣式。 Spread不支持的區(qū)域索引:此區(qū)域的開始行 和結(jié)束行由不同的引用類型組成(例如,一個(gè)絕對(duì)坐標(biāo)和一個(gè)相對(duì)坐標(biāo))。 兩個(gè)行坐標(biāo)要么都是絕對(duì)的,要么都是相對(duì)的。舉例來說: R1C[-1]:R5C[-1] ' 支持 (絕對(duì)行 : 絕對(duì)行) R1C[-1]:RC[-1] ' 不支持 (絕對(duì)行 : 相對(duì)行) RC[-1]:R5C[-1] ' 不支持 (相對(duì)行 : 絕對(duì)行) R[-5]c[-1]:RC[-1] ' 支持 (相對(duì)行 : 相對(duì)行) 通過設(shè)置ReferenceStyle屬性或者使用 默認(rèn)ReferenceStyle值指定引用樣式:
公式中的表單引用當(dāng)一個(gè)單元格的引用包括對(duì)另一個(gè)工作表單元格的引用時(shí),這被稱為表交叉引用。例如下面這個(gè)公式中的表交叉引用使用了加法操作符: FirstRoundData!A2 + SecondRoundData!A2) 如果表單名稱包含非字母數(shù)字字符( 例如,空格),那么在公式中用單引號(hào)擴(kuò)上表單名稱。舉例來說,假設(shè)表單名稱是“page one”,那么該公式就是SUM('page one'!$A$1:$A$5)。 如果表單名稱包含單引號(hào)字符,那么在公式中使用兩個(gè)單引號(hào)字符。舉例來說,假設(shè)表單名稱是“scott's page” 那么該公式就是SUM('scott''spage'!$A$1:$A$5). 下面的示例使用了公式中默認(rèn)的表單名稱:
公式中的嵌套函數(shù)你可以將一個(gè)函數(shù)嵌套在公式的另一個(gè)函數(shù)中。在下面的的這個(gè)示例中,兩個(gè)單元格(使用SUM函數(shù)建立)的值的和被嵌入到PRODUCT公式。 首先單元格類型被設(shè)置,然后單元格值被設(shè)置。
在公式中使用循環(huán)引用你可以引用一個(gè)單元格公式,這個(gè)單元格又包含該公式,就是一個(gè)循環(huán)引用。這是一個(gè)典型的函數(shù)遞歸的方式,通過對(duì)相同函數(shù)的迭代,接近一個(gè)最佳值。你可以選擇函數(shù)迭代(遞歸)自身的次數(shù),通過設(shè)置重新計(jì)算迭代次數(shù)屬性。 如果公式“=COLUMNS(A1:C5)”在單元格C4中,就不會(huì)有結(jié)果返回。換句話說,如果該數(shù)組中最后一個(gè)行索引與列索引都大于公式所在的單元格的行索引與列索引,公式就不會(huì)進(jìn)行計(jì)算。在這種情況下,單元格C4處于區(qū)域A1:C5中。這是公式中的一個(gè)循環(huán)引用,所以Spread并不計(jì)算公式的值,除非迭代被開啟。 Spread通過迭代解決了循環(huán)公式的問題。在每次重新計(jì)算周期中,控件會(huì)進(jìn)行指定次數(shù)的迭代。在每次迭代中,每一個(gè)重復(fù)的公式只進(jìn)行一次計(jì)算。 一個(gè)循環(huán)引用的例子如下: 1. 設(shè)置公式單元格的單元格類型。 2. 使用表單的MaximumIterations屬性設(shè)置重新計(jì)算迭代次數(shù)、 3. 設(shè)置表單的引用樣式。 4. 使用單元格中的循環(huán)引用來定義公式
附:Spread for Windows Forms快速入門系列文章 Spread for Windows Forms快速入門(1)---開始使用Spread Spread for Windows Forms快速入門(2)---設(shè)置Spread表單 Spread for Windows Forms快速入門(3)---行列操作 Spread for Windows Forms快速入門(4)---常用的單元格類型(上) Spread for Windows Forms快速入門(5)---常用的單元格類型(下) Spread for Windows Forms快速入門(6)---定義單元格的外觀 Spread for Windows Forms快速入門(7)---單元格的交互操作 |
|