使用 IronXL 在 C# 中編輯 Excel 公式
IronXL 讓您能夠透過在任何儲存格設定 Formula 屬性、使用 FormattedCellValue 擷取計算結果,以及使用 EvaluateAll() 重新計算工作簿中的所有公式,來以 C# 編輯 Excel 公式。 Formula EvaluateAll() Formula FormattedCellValue 此函式庫支援超過 165 種 Excel 公式,並確保在儲存格值變更時能動態更新。
Excel 公式是一種以等號 (=) 開頭的表達式,用於根據儲存格值進行數學運算、資料處理及結果推導。 內容可能包含算術運算、函式、儲存格參照、常數及邏輯運算。 公式能隨著儲存格數值的變更而動態更新,使 Excel 成為自動化任務與資料分析的萬用工具。 IronXL 支援編輯 Excel 檔案中的現有公式、擷取公式結果,以及強制重新評估工作簿。 這可確保每個公式都會重新計算,以獲得精確的結果。 IronXL 支援超過 165 種公式。
快速入門:立即變更儲存格公式
使用 IronXL 的 Formula 屬性,在任何儲存格中設定或更新公式。 接著呼叫 EvaluateAll() 重新計算所有公式——快速上手並確保結果為最新狀態。
簡化工作流程(5 個步驟)
- 下載 C# 函式庫以編輯試算表中的公式
- 建立新的 Excel 檔案或匯入現有檔案
- 編輯或設定
Formula屬性,以將公式指派給該儲存格 - 透過存取儲存格的
Value屬性來取得結果值 - 匯出已編輯的 Excel 檔案
為何 IronXL 是公式編輯的最佳選擇?
IronXL 免除了對 Microsoft Office Interop 的依賴,同時透過直觀的屬性提供直接的公式存取功能。 此函式庫支援超過 165 種內建的 Excel 函式,能自動處理複雜的公式依賴關係,並在 Windows、Linux 和 macOS 平台上提供快速的處理效能。 其輕量級架構確保了無需外部依賴即可進行與 Excel 相容的運算。
系統需求為何?
IronXL 需要 .NET Framework 4.6.2 或更高版本,或 .NET Core 2.0 及以上版本。 此函式庫可在 Windows、Linux 及 macOS 系統上運行,無需安裝 Microsoft Excel。 若要確保在處理包含複雜公式的大型工作簿時能獲得最佳效能,我們建議至少配備 4GB 記憶體。 請查閱完整文件以了解各平台的詳細要求。
如何開始使用 IronXL?
請透過 Package Manager Console 安裝 NuGet 套件,並使用 Install-Package IronXl.Excel。 安裝完成後,請輸入您的授權金鑰以解鎖完整功能。 在您的 C# 檔案中導入 IronXL 命名空間,即可開始編輯公式。 直觀的 API 設計讓您能在數分鐘內載入 Excel 檔案並修改公式。
如何使用 C# 在 Excel 中編輯公式?
若要編輯或設定公式,請存取 Formula 屬性。 首先,選取一個範圍或儲存格,然後存取並設定 Formula 屬性。 Formula 屬性同時是讀取與設定屬性,若存在公式字串,則會回傳該字串。 呼叫 EvaluateAll() 方法以重新評估整個工作簿,確保計算結果正確無誤。
:path=/static-assets/excel/content-code-examples/how-to/edit-formulas-edit-formulas.cs
using IronXL;
// Load workbook
WorkBook workBook = WorkBook.Load("Book1.xlsx");
// Select worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Edit or Set formula
workSheet["A4"].Formula = "=SUM(A1,A3)";
// Reevaluate the entire workbook
workBook.EvaluateAll();
Imports IronXL
' Load workbook
Private workBook As WorkBook = WorkBook.Load("Book1.xlsx")
' Select worksheet
Private workSheet As WorkSheet = workBook.DefaultWorkSheet
' Edit or Set formula
Private workSheet("A4").Formula = "=SUM(A1,A3)"
' Reevaluate the entire workbook
workBook.EvaluateAll()
IronXL 在處理公式時提供完全的靈活性。 您可以修改現有公式、建立新公式,或根據執行時條件建立動態公式。 此函式庫會自動處理公式語法驗證,確保與 Excel 相容。 針對複雜情境,請參考展示進階操作技巧的完整公式範例。
為何在編輯公式後應使用 EvaluateAll()?
EvaluateAll() 方法可確保您的 Excel 工作簿維持資料完整性。 當您修改公式時,工作簿中所有相關的依賴儲存格可能需要重新計算。 EvaluateAll() 會觸發工作簿的完整重新計算,確保所有公式反映最新的變更。 這在處理層疊公式時至關重要,因為單一儲存格的結果會影響多項計算。 若未呼叫 EvaluateAll(),可能會匯出過時的值,導致資料不一致。
若不重新計算工作簿會發生什麼情況?
跳過重新計算可能會導致嚴重問題。 Excel 檔案同時儲存公式及其快取結果。 當您修改公式卻未重新計算時,快取值將保持不變,導致公式與其顯示結果之間產生不一致。 當使用者在 Excel 中開啟檔案,並看到與預期不同的數值時,此差異便顯而易見。 任何後續依賴這些公式結果的操作,都將使用過時的資料,可能導致下游流程發生錯誤。
我可以一次編輯多個公式嗎?
是的,IronXL 支援透過範圍操作進行批次公式編輯。 使用範圍標記(如 workSheet["A1:A10"])選取多個儲存格,並同時將公式套用至所有儲存格。 對於複雜的公式模式,請遍歷儲存格集合,並運用條件邏輯,根據儲存格位置或現有數值設定不同的公式。 此方法在建立含有重複公式模式的試算表,或透過程式化方式更新大型資料集時,效果尤佳。
如何從公式中取得結果?
若要從公式中取得結果,請使用儲存格的 FormattedCellValue 屬性以獲得精確結果。 在選定的範圍內,使用 First 方法存取儲存格,該方法會選取序列中的第一個元素。 接著,存取 FormattedCellValue 屬性。
:path=/static-assets/excel/content-code-examples/how-to/edit-formulas-retrieve-formula-value.cs
using IronXL;
using System;
using System.Linq;
// Load workbook
WorkBook workBook = WorkBook.Load("Book1.xlsx");
// Select worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Retrieve the result value
string value = workSheet["A4"].First().FormattedCellValue;
// Print the result to console
Console.WriteLine(value);
Imports IronXL
Imports System
Imports System.Linq
' Load workbook
Private workBook As WorkBook = WorkBook.Load("Book1.xlsx")
' Select worksheet
Private workSheet As WorkSheet = workBook.DefaultWorkSheet
' Retrieve the result value
Private value As String = workSheet("A4").First().FormattedCellValue
' Print the result to console
Console.WriteLine(value)
FormattedCellValue 屬性會以 Excel 中顯示的形式返回儲存格的值,並遵循數字格式、日期格式及自訂格式設定規則。 這可確保程式產出的結果與使用者在 Excel 中所見內容保持一致。 若需進行數值分析,請透過 Value 屬性存取原始值,該屬性會回傳未經格式化的底層數值或文字資料。
為何使用 FormattedCellValue 而非 Value 屬性?
FormattedCellValue 提供儲存格內容的即用顯示格式,對於在您的應用程式中維持 Excel 的視覺格式至關重要。 雖然 Value 屬性會傳回原始資料,但 FormattedCellValue 會套用 Excel 的格式化規則,包括數字格式、貨幣符號、百分比顯示及日期格式。 當生成報告或向終端使用者展示資料時,此區別至關重要,因為使用者期望數值格式能與其慣用的 Excel 體驗保持一致。 有關詳細的格式設定選項,請參閱 API 參考文件。
"儲存格值"與"公式結果"有何區別?
儲存格的公式是指表達式(例如"=A1+B1"),而公式結果則是計算出的數值(例如"150")。 IronXL 透過不同的屬性來區分這些概念:Formula 代表表達式,而 @@--程式碼-1018--@@/@@--程式碼-1019--@@ 則代表結果。 此分離機制讓您能夠檢查公式以進行稽核、透過程式碼修改計算,或擷取結果以進行後續處理。 部分儲存格包含不含公式的靜態值,其中 Formula 屬性會傳回 null,而 Value 則仍會提供該儲存格的內容。
如何處理公式錯誤?
Excel 中的公式錯誤(例如 #DIV/0!、#價值! 或 #REF!)在 C# 程式碼中需要特別處理。 IronXL 會保留這些錯誤狀態,以便進行偵測並透過程式化方式進行回應。 請透過對 FormattedCellValue 屬性進行字串比對,檢查儲存格是否含有錯誤;或在進行數值運算處理公式結果時,實作 try-catch 區塊。 為實現完善的錯誤處理,請在公式運算前加入驗證邏輯,或於公式中使用 Excel 的 IFERR或 函數來提供備用值。 進一步了解如何排除常見問題。
IronXL 支援哪些 Excel 公式?
Excel 內含 450 多個用於各種計算目的的公式。 IronXL 支援約 165 種最常用的公式。 請檢查以下支援的公式:
| 公式名稱 | 描述 |
|---|---|
| ABS | 返回數值的絕對值,不考慮其正負號。 |
| INT | 將數字向下取整至最接近的整數。 |
| 字數 | 計算指定範圍內包含數字的儲存格數量。 |
| IF | 執行條件測試,若條件為真則返回一個值,若為假則返回另一個值。 |
| SUM | 將一組數字相加。 |
| 平均 | 計算一組數字的平均值。 |
| MIN | 從一組數字中返回最小值。 |
| MAX | 從一組數字中返回最大值。 |
| ROW | 返回儲存格參照的列號。 |
| 專欄 | 返回儲存格參照的欄位編號。 |
| NA | 代表"不可用"或資料缺失的錯誤值。 |
| NPV | 以指定折現率計算一系列現金流的淨現值。 |
| STDEV | 計算一組數字的標準差。 |
| 簽署 | 返回數值的正負號:負數為 -1,零為 0,正數為 1。 |
| ROUND | 將數字四捨五入至指定的小數位數。 |
| 參考 | 在一個範圍內搜尋特定值,並從另一個範圍中返回對應的值。 |
| 目錄 | 返回指定範圍內特定列與列所對應儲存格的值。 |
| REPT | 將文字字串重複指定次數。 |
| MID | 根據指定的起始位置和長度,從給定的文字字串中擷取部分文字。 |
| LEN | 返回文字字串中的字元數。 |
| 價值 | 將代表數字的文字字串轉換為實際的數字。 |
| TRUE | 代表邏輯值"True"。 |
| FALSE | 代表邏輯值"False"。 |
| AND | 檢查所有指定條件是否皆為真,若為真則回傳"True",否則回傳"False"。 |
| 或 | 檢查是否至少有一項指定條件為真,若為真則返回"True",否則返回"False"。 |
| 請勿 | 將條件的邏輯值反轉,將"True"轉為"False",反之亦然。 |
| MOD | 返回一個數除以另一個數時的餘數。 |
| DMIN | 根據指定條件,從資料庫中擷取最小值。 |
| VAR | 計算一組數字的變異數。 |
| TEXT | 使用指定格式將數字轉換為文字。 |
| PV | 根據一系列現金流量和折現率,計算投資或貸款的現值。 |
| FV (未來價值) | 根據定期付款和指定的利率,計算投資或貸款的未來價值。 |
| NPER(週期數) | 根據定期還款和利率,計算達到特定財務目標所需的還款期數。 |
| PMT (支付) | 計算償還貸款或投資所需的定期付款金額,包含本金與利息。 |
| 利率 (RATE) | 計算在進行一系列定期付款的情況下,為達成財務目標所需的利率。 |
| MIRR(修正內部報酬率) | 計算一系列現金流的內部報酬率,並處理多種再投資率與融資利率。 |
| IRR(內部報酬率) | 計算一連串現金流的內部報酬率,以顯示投資達到收支平衡所需的利率。 |
| RAND | 產生一個介於 0 到 1 之間的隨機十進位數。 |
| MATCH | 在指定範圍內搜尋特定值,並回傳所找到項目的相對位置。 |
| 日期 | 透過指定年、月、日來建立日期值。 |
| TIME | 透過指定小時、分鐘和秒數來建立時間值。 |
| DAY | 從指定日期中擷取日期。 |
| 月份 | 從指定日期中提取月份。 |
| 年份 | 從指定日期中提取年份。 |
| WEEKDAY | 返回指定日期的星期幾。 |
| HOUR | 從給定時間中提取小時。 |
| MINUTE | 從指定時間中提取分鐘。 |
| 第二 | 從指定時間中提取秒數。 |
| 現在 | 返回當前的日期和時間。 |
| 重點領域 | 計算參考範圍內的個別範圍數量。 |
| ROWS | 計算指定範圍內的列數。 |
| 專欄 | 計算指定範圍內的欄位數。 |
| OFFSET | 返回從指定儲存格起算,向下或向右移動特定行數與列數後的參考偏移量。 |
| 搜尋 | 在文字字串中搜尋子字串,並回傳其位置。 |
| TRANSPOSE | 將範圍內的列與行進行轉置。 |
| ATAN2 | 計算指定 x 和 y 座標的反正切值。 |
| ASIN | 計算指定數值的反正弦值。 |
| ACOS | 計算指定數值的反正弦值。 |
| 選擇 | 根據指定位置,從一組值中返回對應的值。 |
| H參考 | 在表格或範圍的第一行中搜尋指定值,並回傳同一欄中指定列的值。 |
| V參考 | 在表格或範圍的第一欄中搜尋指定值,並回傳同一列中指定欄位的值。 |
| ISREF | 檢查值是否為引用,若是則返回"True",否則返回"False"。 |
| LOG | 計算指定底數下的數值對數。 |
| CHAR | 返回由指定數字所對應的字元。 |
| LOWER | 將文字轉換為小寫。 |
| UPPER | 將文字轉換為大寫。 |
| 正確 | 將文字字串中每個單字的首字母大寫。 |
| LEFT | 從文字字串的開頭擷取指定數量的字元。 |
| RIGHT | 從文字字串的末端擷取指定數量的字元。 |
| EXACT | 比較兩個文字字串,若兩者相同則回傳"True",若不同則回傳"False"。 |
| TRIM | 從文字字串中移除多餘的空格,但單詞之間的單一空格除外。 |
| 替換 | 將文字字串中的指定字元數替換為新文字。 |
| 替代方案 | 將文字串中指定的文字替換為新文字。 |
| 程式碼 | 返回文字字串中第一個字元的 Unicode 數值。 |
| 搜尋 | 在文字字串中搜尋特定子字串,並回傳其位置。 |
| ISERR | 檢查某個值是否為"#N/A"以外的錯誤值,若是則返回"True",否則返回"False"。 |
| ISTEXT | 檢查值是否為文字,若是則返回"True",否則返回"False"。 |
| ISNUMBER | 檢查值是否為數字,若是則返回"True",否則返回"False"。 |
| ISBLANK | 檢查儲存格是否為空,若為空則傳回"True",否則傳回"False"。 |
| T | 將值轉換為文字格式。 |
| 日期價值 | 將以文字形式表示的日期轉換為日期序列號。 |
| CLEAN | 從文字中移除不可印字元。 |
| MDETERM | 計算陣列的行列式。 |
| MINVERSE | 返回矩陣的乘法逆元(倒數)。 |
| MMULT | 將兩個矩陣相乘。 |
| IPMT | 計算特定期間內貸款還款中的利息部分。 |
| PPMT | 計算特定期間內貸款還款中的本金部分。 |
| 字數A | 計算範圍內非空儲存格的數量,包含文字與數字。 |
| 產品 | 將範圍內的所有數字相乘。 |
| FACT | 計算一個數的階乘。 |
| ISNONTEXT | 檢查值是否為非文字,若為非文字則返回"True",若為文字則返回"False"。 |
| VARP | 根據樣本估算總體的變異數。 |
| TRUNC | 將數字截斷至指定的小數位數。 |
| ISLOGICAL | 檢查某個值是否為邏輯(布林)值,若是則返回"True",否則返回"False"。 |
| USDOLLAR | 將數字轉換為文字格式,包含貨幣符號及兩位小數。 |
| 總結 | 將數字四捨五入至指定的小數位數。 |
| ROUNDDOWN | 將數字向下取整至指定的小數位數。 |
| RANK | 返回清單中某個數值的排名,並提供處理並列情況的選項。 |
| 地址 | 根據列和行號,將儲存格位址以文字形式傳回。 |
| DAYS360 | 採用 360 天為一年的計算方式,計算兩個日期之間的天數。 |
| 今日 | 返回當前日期。 |
| MEDIAN | 返回一組數字的中位數(中間值)。 |
| SUM產品 | 將陣列中的對應元素相乘,並返回各乘積的總和。 |
| SINH | 計算數值的雙曲正弦值。 |
| COSH | 計算數值的雙曲餘弦值。 |
| TANH | 計算數值的雙曲正切值。 |
| ASINH | 計算數值的雙曲正弦反函數。 |
| ACOSH | 計算數值的雙曲餘弦反函數。 |
| ATANH | 計算數值的雙曲正切反函數。 |
| ExternalFunction | 代表由外部增益集或自訂函式所提供的函式呼叫或操作。 |
| ERR或TYPE | 返回一個數字,該數字對應於指定值中的錯誤類型。 |
| AVEDEV | 計算一組數值與其平均值的平均絕對偏差。 |
| COMBIN | 計算從較大集合中選取指定數量項目的排列組合數。 |
| EVEN | 將數字向上取整至最接近的偶數。 |
| FLO或 | 將數字向下取整至指定有效位數的最近倍數。 |
| 上限 | 將數字向上取整至指定位數的最近倍數。 |
| N或MDIST | 計算指定數值的累積常態分佈函數。 |
| N或MSDIST | 計算標準正態累積分佈函數。 |
| N或MINV | 計算指定機率下標準累積分佈函數的逆函數。 |
| N或MSINV | 計算標準正態累積分佈函數的逆函數。 |
| 標準化 | 將數值轉換為均值為 0、標準差為 1 的標準正態分佈。 |
| ODD | 將數字向上取整至最接近的奇數。 |
| POISSON | 計算給定事件數量的泊松分佈機率。 |
| TDIST | 根據指定的數值和自由度,計算 Student's t 分布。 |
| SUMXMY2 | 計算兩個陣列中對應值之間差異的平方和。 |
| SUMX2MY2 | 計算兩個陣列中對應值之間差異的平方和。 |
| SUMX2PY2 | 計算兩個陣列中對應數值之和的平方和。 |
| INTERCEPT | 計算趨勢線在圖表中與 y 軸相交的點。 |
| SLOPE | 計算圖表中趨勢線的斜率。 |
| DEVSQ | 返回資料點與其平均值的偏差平方和。 |
| SUMSQ | 計算一組數字的平方和。 |
| LARGE | 返回資料集中第 k 大值,其中 k 為指定數值。 |
| 簡短 | 返回資料集中第 k 個最小值,其中 k 為指定值。 |
| PERCENTILE | 返回資料集的第 k 個百分位數,其中 k 為指定值。 |
| PERCENTRANK | 返回資料集內某個值的排名,以該值佔總值數的百分比表示。 |
| MODE | 返回資料集中出現次數最多的值。 |
| CONCATENATE | 將多個文字字串合併為一個。 |
| POWER | 將一個數值提升至指定次方。 |
| RADIANS | 將度轉換為弧度。 |
| DEGREES | 將弧度轉換為度。 |
| 小計 | 對範圍執行各種計算(例如:總和、平均值),並可選擇是否包含或排除範圍內其他 小計 的結果。 |
| SUMIF | 將範圍內符合指定條件的所有數字相加。 |
| 字數IF | 計算範圍內符合指定條件的儲存格數量。 |
| 字數BLANK | 計算範圍內空儲存格的數量。 |
| ROMAN | 將阿拉伯數字轉換為羅馬數字。 |
| 超連結 | 建立指向網頁或檔案的超連結。 |
| MAXA | 從一組數字(包含文字和邏輯值)中返回最大值。 |
| MINA | 從一組數字(包含文字和邏輯值)中返回最小值。 |
我應該最常使用哪些公式?
商業應用程式中最常使用的公式包括 IF 以及 V參考 函式。 針對金融應用程式,請使用 PMT 及 IRR 函式。 統計分析可透過 MEDIAN 及 PERCENTILE 函式來提升效能。 文字處理依賴 RIGHT 及 TRIM 函式。 理解這些核心公式,便能透過組合來建立複雜的計算。 IronXL 全面的公式支援功能,確保您的 C# 應用程式能處理任何 Excel 運算需求。
如果我的公式不被支援該怎麼辦?
雖然 IronXL 支援 165 多種公式,涵蓋多數商業需求,但某些特殊或較新的 Excel 函數可能無法使用。 您有幾種選擇:首先,請確認是否能透過組合使用受支援的公式來達到相同效果。 許多複雜的 Excel 函數皆可透過基本的數學運算來實現。 或者,可直接在 C# 中實作計算邏輯,並將結果以數值形式寫入儲存格。 若遇到關鍵但未受支援的公式,請聯繫 IronXL 技術支援以討論可能的增補方案。 開發團隊會根據使用者回饋定期更新公式支援功能。
我可以新增自訂公式支援嗎?
IronXL 致力於支援標準的 Excel 公式,以確保在不同 Excel 版本及應用程式間的相容性。 雖然您無法透過 IronXL 直接在 Excel 中新增自訂公式定義,但您可以建立有效的替代方案。 在您的 C# 應用程式中實作自訂計算邏輯,並使用 IronXL 讀取輸入值及寫入結果。 針對複雜情境,請結合多種支援的公式以達成預期結果。 此方法在維持 Excel 檔案相容性的同時,利用 C# 進行自訂計算。 探索 IronXL 的豐富功能,充分發揮您的公式自動化能力。
常見問題
如何使用 C# 透過程式碼編輯 Excel 公式?
IronXL 允許您透過設定任一儲存格的 Formula 屬性,以 C# 編輯 Excel 公式。只需載入工作簿、存取目標儲存格,並將以 '=' 開頭的公式字串指派給 Formula 屬性。接著呼叫 EvaluateAll() 方法,即可重新計算工作簿中的所有公式,以獲得精確的結果。
支援哪些類型的 Excel 公式?
IronXL 支援超過 165 種內建的 Excel 公式,包括算術運算、數學函數、統計計算、邏輯運算以及複雜的公式依賴關係。IronXL程式庫可處理所有標準的 Excel 公式語法,並確保與 Excel 產生的檔案相容。
如何從公式中取得計算結果?
在 IronXL 中設定公式後,您可以透過儲存格的 FormattedCellValue 屬性取得計算結果。此屬性會將公式的評估結果以格式化字串的形式傳回,其顯示樣式與 Excel 中完全一致。
我需要安裝 Microsoft Excel 才能編輯公式嗎?
不,IronXL 為獨立運作,無需 Microsoft Excel 或 Office Interop。此程式庫內建專屬的公式運算引擎,可跨 Windows、Linux 及 macOS 平台運作,使其成為伺服器環境與跨平台應用程式的理想選擇。
如何確保在進行變更後,所有公式都會重新計算?
IronXL 提供 EvaluateAll() 方法,用於重新計算工作簿中的所有公式。在修改儲存格值或公式後呼叫此方法,可確保所有依賴性計算皆已更新為最新資料,從而維持整個試算表的準確性。
公式編輯的系統需求為何?
IronXL 需要 .NET Framework 4.6.2 或更高版本,或 .NET Core 2.0 及以上版本。若要在處理複雜公式和大型工作簿時獲得最佳效能,建議至少配備 4GB 記憶體。該程式庫的輕量級架構確保了高效處理,且無需外部依賴項。

