如何使用C#在Excel中編輯工作表公式

使用IronXL在C#中編輯Excel公式

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronXL允許您在C#中透過在任意格子上設定EvaluateAll()重新計算工作簿中的所有公式。 Formula EvaluateAll() Formula FormattedCellValue 本程式庫支援超過165個Excel公式,並確保在格子值更改時動態更新。

Excel公式是一種以等號(=)開始的表達式,用於數學計算、資料處理和根據格子值導出結果。 它可能包含算術、函式、格子引用、常數和邏輯運算。 當格子值更改時,公式可以進行動態更新,使Excel成為自動化任務和資料分析的多功能工具。 IronXL支援編輯現有的公式在Excel文件中,檢索公式的結果,並強制重新評估工作簿。 這確保每個公式將被重新計算以獲得準確的結果。 IronXL支援超過165個公式

快速入門:即時更改一個格子公式

使用IronXL的Formula屬性在任何格子上設定或更新公式。 然後調用EvaluateAll()以重新計算所有公式—快速入門並確保更新的結果。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronXL.Excel

    PM > Install-Package IronXL.Excel
  2. 複製並運行這段程式碼片段。

    IronXL.WorkBook.Load("MyFile.xlsx").DefaultWorkSheet["B2"].Formula = "=AVERAGE(C1,C2)";
    workBook.EvaluateAll();
  3. 部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronXL,透過免費試用

    arrow pointer


為什麼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的RAM。 查看完整的文件以獲取詳細的平台特定需求。

如何開始使用IronXL?

使用套件管理器控制台與Install-Package IronXL.Excel安裝NuGet包。 安裝後,應用您的授權金鑰以解鎖完整功能。 在您的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()
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

FormattedCellValue屬性將返回格子中的值,格式尊重數字格式、日期格式和自定義格式規則。 這確保程式化輸出與使用者在Excel中看到的保持一致。 對於數值分析,透過Value屬性存取原始值,返回未應用格式的底層數字或文字資料。

為什麼使用Value屬性?

FormattedCellValue提供格子內容即用的表示,對於在應用程式中維持Excel的視覺格式至關重要。 雖然FormattedCellValue應用了Excel的格式規則,包括數字格式、貨幣符號、百分比顯示和日期格式。 在生成報告或向最終使用者顯示資料時,這種區別變得至關重要,他們期望值的格式與他們的Excel體驗一致。 有關詳細的格式選項,請參閱API參考

格子值與公式結果有什麼區別?

一個格子的公式是表達式(如"=A1+B1"),而公式結果是計算後的值(如"150")。 IronXL透過不同的屬性分離這些觀念:FormattedCellValue表示結果。 這種分離允許您檢查公式以進行審計,程式化地修改計算或提取結果以供進一步處理。 有些格子包含無公式的靜態值,其中Value仍提供格子的內容。

如何處理公式錯誤?

Excel中的公式錯誤(如#DIV/0!、#VALUE!、或#REF!)需在C#程式碼中特別處理。 IronXL將保留這些錯誤狀態,允許檢測和程式化響應。 透過FormattedCellValue屬性的字串比較檢查格子是否包含錯誤,或在數值處理公式結果時實施try-catch塊。 為了進行健壯的錯誤處理,考慮在公式評估前進行驗證邏輯,或在公式中使用Excel的IFERROR函式提供後備值。 了解更多關於故障排除常見問題

IronXL支援哪些Excel公式?

Excel包含超過450個用於各種計算目的的公式。 IronXL支援約165個最常用的公式。 檢查以下內容以獲得支援的公式:

公式名稱 描述
ABS返回數字的絕對值,不考慮其符號。
INT將數字向下取整為最接近的整數。
COUNT計算指定範圍內包含數字的格子的數目。
IF執行條件測試,若條件為真則返回一個值,若為假則返回另一個值。
SUM將一範圍的數字相加。
AVERAGE計算一範圍數字的平均值。
MIN返回一組數字中的最小值。
MAX返回一組數字中的最大值。
ROW返回一個格子引用的行號。
COLUMN返回一個格子引用的列號。
NA表示錯誤值"不可用"或遺失的資料。
NPV計算在指定折扣率下的現金流系列的淨現值。
STDEV計算一組數字的標準差。
SIGN返回數字的符號-1為負,0為零,1為正。
ROUND將數字四捨五入到指定的小數位數。
LOOKUP在一個範圍中搜索一個值並返回另一個範圍中的相應值。
INDEX返回指定範圍中給定行和列的格子的值。
REPT重複一個文字字串指定的次數。
MID從給定的文字字串中根據指定的起始位置和長度提取文字的一部分。
LEN返回一個文字字串中的字元數。
VALUE將表示數字的文字字串轉換為實際數字。
TRUE代表邏輯值"True"。
FALSE代表邏輯值"False"。
AND檢查所有指定條件是否為真,如果是則返回"True",否則返回"False"。
OR檢查至少一個指定條件是否為真,如果是則返回"True",否則返回"False"。
NOT反轉一個條件的邏輯值,將"True"轉為"False",反之亦然。
MOD返回一個數字除以另一個數字的餘數。
DMIN提取基於指定條件的資料庫中的最小值。
VAR計算一組數字的方差。
TEXT使用指定的格式將數字轉換為文字。
PV基於一系列現金流和折扣率計算投資或貸款的現值。
FV(未來值)基於定期付款和指定利率計算投資或貸款的未來值。
NPER(期數)確定在給定定期付款和利率的情況下達到某一財務目標所需的付款期數。
PMT(付款)計算支付貸款或投資所需的定期付款,包含本金和利息。
RATE(利率)計算達到財務目標所需的利率,包括定期付款。
MIRR(修正的內部收益率)計算一系列現金流的內部收益率,考慮多種再投資和融資率。
IRR(內部收益率)計算一系列現金流的內部收益率,指示投資達到盈虧平衡的利率。
RAND生成0到1之間的隨機小數。
MATCH在一個範圍中搜索指定的值並返回找到的項目的相對位置。
DATE透過指定年份、月份和日期建立日期值。
TIME透過指定小時、分鐘和秒建立時間值。
DAY從給定的日期中提取日期。
MONTH從給定的日期中提取月份。
YEAR從給定的日期中提取年份。
WEEKDAY返回指定日期的一周中的星期幾。
HOUR從給定的時間中提取小時。
MINUTE從給定的時間中提取分鐘。
SECOND從給定的時間中提取秒。
NOW返回當前日期和時間。
AREAS計算一個引用中的單獨範圍數量。
ROWS計算指定範圍中的行數。
COLUMNS計算指定範圍中的列數。
OFFSET透過某一行和列數量偏移量返回一個指定格子的引用。
SEARCH在一個文字字串中搜索子字串並返回其位置。
TRANSPOSE轉置範圍的行和列。
ATAN2計算指定x和y座標的反正切。
ASIN計算指定值的反正弦。
ACOS計算指定值的反餘弦。
CHOOSE從值列表中根據指定位置返回一個值。
HLOOKUP在表或範圍的頂行中搜索一個值,並從指定行中返回同一列中的值。
VLOOKUP在表或範圍的首列中搜索一個值,並從指定列中返回同一行中的值。
ISREF檢查一個值是否為參考,若是則返回"True",若不是則返回"False"。
LOG計算一個數字的對數,取指定的底數。
CHAR返回由給定數字指定的字元。
LOWER將文字轉換為小寫。
UPPER將文字轉換為大寫。
PROPER將文字字串中每個單詞的首字母大寫。
LEFT從文字字串的開頭提取指定的字元數量。
RIGHT從文字字串的結尾提取指定的字元數量。
EXACT比較兩個文字字串,如果相同則返回"True",不相同則返回"False"。
TRIM從文字字串中移除多餘的空格,保留單詞間的單一空格。
REPLACE在文字字串中用新的文字替換指定數量的字元。
SUBSTITUTE在文字字串中用新的文字替換指定文字的出現次數。
CODE返回文字字串中第一個字元的數字Unicode值。
FIND在文字字串中搜索特定的子字串並返回其位置。
ISERR檢查一個值是否為錯誤值而非"#N/A",若是則返回"True",若不是則返回"False"。
ISTEXT檢查一個值是否為文字,若是則返回"True",若不是則返回"False"。
ISNUMBER檢查一個值是否為數字,若是則返回"True",若不是則返回"False"。
ISBLANK檢查一個格子是否為空,若是則返回"True",若不是則返回"False"。
T將一個值轉換為文字格式。
DATEVALUE將作為文字表示的日期轉換為日期序列號。
CLEAN從文字中移除不可列印字元。
MDETERM計算一個陣列的矩陣行列式。
MINVERSE返回矩陣的相乘反數(倒數)。
MMULT將兩個矩陣相乘。
IPMT計算特定期間貸款付款中的利息部分。
PPMT計算特定期間貸款付款中的本金部分。
COUNTA計算範圍內的非空格子的數量,包括文字和數字。
PRODUCT將範圍內的所有數字相乘。
FACT計算一個數字的階乘。
ISNONTEXT檢查一個值是否不是文字,若不是文字則返回"True",若是文字則返回"False"。
VARP基於樣本估計母體的方差。
TRUNC將數字截斷到指定的小數位數。
ISLOGICAL檢查一個值是否為邏輯(布林)值,若是則返回"True",若不是則返回"False"。
USDOLLAR將數字轉換為帶有貨幣符號和兩個小數位的文字格式。
ROUNDUP將數字向上取整到指定的小數位數。
ROUNDDOWN將數字向下取整到指定的小數位數。
RANK返回列表中一個數字的排名,並有選項處理並列情況。
ADDRESS根據行號和列號返回格子地址作為文字。
DAYS360使用360天年計算兩個日期之間的天數。
TODAY返回當前日期。
MEDIAN返回一組數字的中位數(中間值)。
SUMPRODUCT相乘陣列中的對應部分並返回乘積之和。
SINH計算一個數字的雙曲正弦。
COSH計算一個數字的雙曲餘弦。
TANH計算一個數字的雙曲正切。
ASINH計算一個數字的反雙曲正弦。
ACOSH計算一個數字的反雙曲餘弦。
ATANH計算一個數字的反雙曲正切。
ExternalFunction表示由外部附加程式或自定義函式提供的函式調用或操作。
ERRORTYPE返回一個對應於給定值中錯誤型別的數字。
AVEDEV計算一組值從平均值的平均絕對偏差。
COMBIN計算從較大集合選擇若干項的組合數目。
EVEN將數字向上取整為最近的偶數整數。
FLOOR將數字向下取整到指定意義的最近倍數。
CEILING將數字向上取整為指定意義的最近倍數。
NORMDIST計算指定值的累積正態分佈函式。
NORMSDIST計算標準正態累積分佈函式。
NORMINV計算對應於指定概率的正態累積分佈函式的反函式。
NORMSINV計算標準正態累積分佈函式的反函式。
STANDARDIZE將值轉換為平均值為0且標準差為1的標準正態分布。
ODD將數字向上取整為最近的奇數整數。
POISSON計算給定事件數目下的泊松分佈概率。
TDIST計算指定值及自由度的Student's t-分布。
SUMXMY2計算兩個陣列中對應值之差的平方和。
SUMX2MY2計算兩個陣列中對應值之差的平方和。
SUMX2PY2計算兩個陣列中對應值之和的平方和。
INTERCEPT計算趨勢線在圖表中與y-軸交叉的點。
SLOPE計算圖表中趨勢線的斜率。
DEVSQ返回資料點從平均值偏差的平方和。
SUMSQ計算一組數字的平方和。
LARGE返回資料集中第k大的數值,其中k為指定值。
SMALL返回資料集中第k小的數值,其中k為指定值。
PERCENTILE返回資料集中第k百分數的位置,其中k為指定值。
PERCENTRANK返回資料集中一個值的排名作為總值數量的百分比。
MODE返回資料集中最頻繁出現的值。
CONCATENATE將多個文字字串合併為一個。
POWER將數字提升到指定的冪。
RADIANS將度數轉換為弧度。
DEGREES將弧度轉換為度數。
SUBTOTAL對範圍進行各種計算(如,和、平均),您可選擇是否包含或不包括範圍內的其他SUBTOTAL結果。
SUMIF將符合指定條件的範圍內的所有數字相加。
COUNTIF計算範圍中符合指定條件的格子的數量。
COUNTBLANK計算範圍中空白格的數量。
ROMAN將阿拉伯數字轉換為羅馬數字。
HYPERLINK建立到網站或文件的超連結。
MAXA返回一組數字中,包括文字和邏輯值的最大值。
MINA返回一組數字中,包括文字和邏輯值的最小值。

我應該最常使用哪些公式?

商業應用中最常使用的公式包括VLOOKUP函式。 對於金融應用,使用IRR函式。 統計分析受益於PERCENTILE函式。 文字操作依賴於TRIM函式。 理解這些核心公式使得可以透過組合構建複雜的計算。 IronXL的全面公式支援確保您的C#應用程式能處理任何Excel計算需求。

如果我的公式不被支援怎麼辦?

雖然IronXL支援165個以上涵蓋大多數商業需求的公式,但某些專門或更新的Excel函式可能不可用。 您有幾個選擇:首先,檢查是否可透過結合支援的公式達到相同的結果。 許多複雜的Excel函式可以透過基本的數學運算復制。 或者,在C#中直接實現計算邏輯,並將結果作為值寫入格子。 對於關鍵未支援的公式,請聯繫IronXL支援來討論可能的增強。 開發團隊定期根據使用者反饋更新公式支援。

IronXL是否支援Microsoft 365 (_xlfn) 函式?

IronXL通過EvaluateAll()評估40多個現代Excel函式,無論是否含有Microsoft 365儲存工作簿時寫入的_xlfn.GCD都被識別)。 _xlfn.SINGLE函式,即Excel的動態-陣列溢出存根,被作為通過返回其標量參數。 已正確評估的公式不受影響,並產生相同的結果。

請注意由Microsoft 365儲存的工作簿先前在這些函式上失敗,現在可以正確評估。

我可以新增自定義的公式支援嗎?

IronXL專注於支援標準的Excel公式,確保跨不同Excel版本和應用的相容性。 雖然您無法直接透過IronXL將自定義公式定義新增到Excel中,但可以建立有效的替代方案。 在您的C#應用程式中實作自定義計算邏輯,並使用IronXL讀取輸入值和寫入結果。 對於複雜情況,結合多個支援的公式以達成所需結果。 此方法保持Excel文件相容性,同時透過C#進行自定義計算。 探索IronXL的豐富功能以最大化您的公式自動化能力。

常見問題

我如何在C#中以程式方式編輯Excel公式?

IronXL允許您通過設定任何單元格的Formula屬性在C#中編輯Excel公式。只需載入您的工作簿,存取所需的單元格,並將公式字串以'='開頭指派給Formula屬性。然後調用EvaluateAll()以重新計算工作簿中的所有公式以獲取準確結果。

支援哪些型別的Excel公式?

IronXL支援超過165種內建Excel公式,包括算術操作、數學函式、統計計算、邏輯操作及複雜的公式依賴。該程式庫處理所有標準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的RAM。該程式庫的輕量架構確保高效處理,無外部依賴。

IronXL是否支援現代Microsoft 365 (_xlfn) Excel函式?

是的。IronXL透過EvaluateAll()評估40多種額外的現代Excel函式,無論是否帶有Microsoft 365儲存至工作簿的_xlfn.前綴(例如,GCD和_xlfn.GCD都被識別)。以前在這些函式上拋出NotImplementedFunctionException的工作簿現在正確評估,且_xlfn.SINGLE作為傳遞工具來處理,返回其標量參數。已正確評估的公式會產生相同的結果。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備好開始了嗎?
Nuget 下載 2,150,290 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

仍在滾動嗎?

想要快速證明嗎? PM > Install-Package IronXL.Excel
運行一個範例 觀看您的資料成為試算表。