原創|其它|編輯:郝浩|2011-08-09 17:10:27.000|閱讀 524 次
概述:Spread的公式計算引擎支持300多種內置函數,并支持通過內置函數和運算符來自定義公式。支持的函數包括日期、時間函數、工程計算函數、財務計算函數、邏輯函數、數學和三角函數、統計函數、文本函數等。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Spread的公式計算引擎支持300多種內置函數,并支持通過內置函數和運算符來自定義公式。支持的函數包括日期、時間函數、工程計算函數、財務計算函數、邏輯函數、數學和三角函數、統計函數、文本函數等。
公式計算引擎支持單元格的引用、表單的交叉引用、循環引用、函數嵌套等。
放置公式在單元格中
你可以添加一個公式到一個單元格或單元格區域內。 你還可以向一行或者一列中所有的單元格添加公式。該公式是一個具有說明公式字符串的公式,通常是包含一個函數,運算符和常數的集合體。
當 把一個公式分配到行或列的時候,這個公式為每一個行或列的單元格所用(假設該公式沒有在單元格級別上被覆蓋)。對于在一行或者一列中的公式,Spread 使用行或列中的第一個單元格為基準位置。如果你使用相對尋址,這個公式為列A中的每一個單元格進行測算,每一個單元格中都有一個不同的結果 。如果你想要列A中每一個單元格對C2和D2的值的和進行計算(而不是C列和D列中每一個單元格的值進行計算),那么你就可以使用公 式$C$2+$D$2,它使用了絕對地址。
你可以通過指定該對象的Formula屬性來添加一個公式。 下面已經給出使用代碼的步驟。
當 你使用Cells對象的Text屬性對單元格進行賦值時,表單使用單元格類型將一個指定的字符串轉換為需要的數據類型。舉例來說,一個數字單元格類型將字 符串轉換為雙精度浮點數數據類型。當你使用Cells對象的Value屬性對單元格進行賦值時,表單根據原樣接受賦值的對象并且不會進行解析。因此如果你 使用一個值進行設置,它仍然會是字符串。一些計算的函數(舉例來說,SUM)忽視了單元格區域中的非數字的值。舉例來說,如果單元格區域A1:A3包含數 值{1,“2”,3},那么公式SUM{A1:A3}計算的結果為4因為SUM函數忽略了字符串“2”。請確定你正確的設置了每一個單元格的數字,這些數 字用于公式的計算中并且你已經將其設置為正確的數據類型。
下面的這個示例顯示了如何指定一個公式,找到第一個單元格的值的五十倍的結果,并且將結果放入另一單元格中。然后,它可以求得一個單元格區域的總和 (A1到A4)并且將結果放入第三列的每一個單元格中。
FpSpread1.ActiveSheet.Cells[2, 0].Formula = "PRODUCT(A1,5)"; FpSpread1.ActiveSheet.Columns[3].Formula = "SUM(A1:A4)"; |
公式中的單元格引用
除 了數值,運算符,以及函數之外,一個公式還可以包括其它單元格值的引用。舉例來說,要查找兩個單元格的值的總和,該公式可以通過行和列查找到單元格的坐 標。 你可以使用絕對單元格引用(根據行和列的實際坐標)或相對單元格引用(相對于當前單元格的坐標)。你可以使用ReferenceStyle屬性,選擇對表 單使用哪種類型的單元格引用。一個公式不能同時包含絕對單元格引用和相對單元格引用。如果你已經將單元格引用樣式變成不能顯示公式的樣式,Spread控 件向公式提供一個問號作為占位符以代表不能顯示的單元格引用。
下表包含若干個示例,它們有效地使用了公式的引用:
函數 |
描述 |
SUM(A1:A10) |
在第一列中計算行1到行10的總和 |
PI()*C6 |
Pi倍單元格C6的值 |
(A1 + B1) * C1 |
將前兩個單元格的數值相加,然后將這個結果乘以第三個單元格中的值。 |
IF(A1>5, A1*2, A1*3) |
如果單元格A1的值大于5,那么將單元格A1的內容乘以2,否則將A1的內容乘以3 |
如 果你在單元格B1的公式中定義相對單元格引用 為RC[-1]+R[-1]C,則公式將被解析為左邊的(A1)單元格的 值加到上面的單元格(“B0“)的值當中去。 控件會將單元格"B0" 的值看作空的單元格。如果你更改單元格引用樣式風格為A1的樣式,公式會變為A1+B? ,因為A1的樣式不能表示單元格"B0"。然而,控件仍認為公式會使用R1C1引用樣式。
Spread不支持的區域索引:此區域的開始行 和結束行由不同的引用類型組成(例如,一個絕對坐標和一個相對坐標)。
兩個行坐標要么都是絕對的,要么都是相對的。舉例來說:
R1C[-1]:R5C[-1] ' 支持 (絕對行 : 絕對行)
R1C[-1]:RC[-1] ' 不支持 (絕對行 : 相對行)
RC[-1]:R5C[-1] ' 不支持 (相對行 : 絕對行)
R[-5]c[-1]:RC[-1] ' 支持 (相對行 : 相對行)
通過設置ReferenceStyle屬性或者使用 默認ReferenceStyle值指定引用樣式:
fpSpread1.Sheets[0].ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.A1; |
公式中的表單引用
當一個單元格的引用包括對另一個工作表單元格的引用時,這被稱為表交叉引用。例如下面這個公式中的表交叉引用使用了加法操作符:
FirstRoundData!A2 + SecondRoundData!A2)
如 果表單名稱包含非字母數字字符( 例如,空格),那么在公式中用單引號擴上表單名稱。舉例來說,假設表單名稱是“page one”,那么該公式就是SUM('page one'!$A$1:$A$5)。 如果表單名稱包含單引號字符,那么在公式中使用兩個單引號字符。舉例來說,假設表單名稱是“scott's page” 那么該公式就是SUM('scott''spage'!$A$1:$A$5).
下面的示例使用了公式中默認的表單名稱:
fpSpread1.Sheets[0].Cells[0,0].Formula = "Sheet1!A3 + Sheet2!A2"; |
公式中的嵌套函數
你可以將一個函數嵌套在公式的另一個函數中。在下面的的這個示例中,兩個單元格(使用SUM函數建立)的值的和被嵌入到PRODUCT公式。 首先單元格類型被設置,然后單元格值被設置。
fpSpread1.Sheets[0].Cells[3, 1].Formula = "PRODUCT(A1, SUM(A2,A3))"; |
在公式中使用循環引用
你可以引用一個單元格公式,這個單元格又包含該公式,就是一個循環引用。這是一個典型的函數遞歸的方式,通過對相同函數的迭代,接近一個最佳值。你可以選擇函數迭代(遞歸)自身的次數,通過設置重新計算迭代次數屬性。
如 果公式“=COLUMNS(A1:C5)”在單元格C4中,就不會有結果返回。換句話說,如果該數組中最后一個行索引與列索引都大于公式所在的單元格的行 索引與列索引,公式就不會進行計算。在這種情況下,單元格C4處于區域A1:C5中。這是公式中的一個循環引用,所以Spread并不計算公式的值,除非 迭代被開啟。
Spread通過迭代解決了循環公式的問題。在每次重新計算周期中,控件會進行指定次數的迭代。在每次迭代中,每一個重復的公式只進行一次計算。
一個循環引用的例子如下:
1. 設置公式單元格的單元格類型。
2. 使用表單的MaximumIterations屬性設置重新計算迭代次數、
3. 設置表單的引用樣式。
4. 使用單元格中的循環引用來定義公式
fpSpread1.ActiveSheet.Iteration = true; fpSpread1.ActiveSheet.SetValue(0, 1, 20); fpSpread1.ActiveSheet.MaximumChange = 5; fpSpread1.ActiveSheet.MaximumIterations = 5; fpSpread1.ActiveSheet.SetFormula(0, 2, "A1*3"); fpSpread1.ActiveSheet.SetFormula(0, 0, "B1+C1"); |
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園