最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#代碼實(shí)現(xiàn)添加或讀取Excel公式的完整指南

 更新時(shí)間:2026年05月14日 08:10:07   作者:LSTM97  
在日常的辦公數(shù)據(jù)處理任務(wù)中,Excel 公式和函數(shù)是自動(dòng)化計(jì)算和數(shù)據(jù)分析的基石,本文將借助 Free Spire.XLS for .NET 這款輕量級(jí)且免費(fèi)的組件,詳細(xì)演示如何使用 C# 實(shí)現(xiàn) Excel 公式的添加與讀取操作,感興趣的小伙伴可以了解下

在日常的辦公數(shù)據(jù)處理任務(wù)中,Excel 公式和函數(shù)是自動(dòng)化計(jì)算和數(shù)據(jù)分析的基石。對(duì)于 .NET 開發(fā)者而言,如何通過編程方式向 Excel 文件注入公式,或者從已有的表格中提取公式邏輯,是一個(gè)常見且實(shí)用的需求。本文將借助 Free Spire.XLS for .NET 這款輕量級(jí)且免費(fèi)的組件,詳細(xì)演示如何使用 C# 實(shí)現(xiàn) Excel 公式的添加與讀取操作。

準(zhǔn)備工作:引入 Free Spire.XLS

在開始編碼之前,我們需要在項(xiàng)目中引入 Free Spire.XLS for .NET。該組件可以通過 NuGet 包管理器輕松安裝,在包控制臺(tái)中執(zhí)行以下命令即可:

Install-Package FreeSpire.XLS

安裝完成后,我們就可以在代碼中通過 using Spire.Xls; 命名空間來訪問所有 Excel 操作相關(guān)的類與方法。

一、向 Excel 添加公式

添加公式的場(chǎng)景非常廣泛,例如批量計(jì)算銷售總額、統(tǒng)計(jì)學(xué)生平均分、生成動(dòng)態(tài)報(bào)表等。下面的示例展示了如何創(chuàng)建一個(gè)新的 Excel 工作簿,并在其中寫入基礎(chǔ)數(shù)據(jù),然后為指定單元格添加公式。

using Spire.Xls;

Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];

// 添加基礎(chǔ)數(shù)值數(shù)據(jù)
sheet.Range[1, 1].NumberValue = 1;
sheet.Range[1, 2].NumberValue = 2;
sheet.Range[1, 3].NumberValue = 3;
sheet.Range[1, 4].NumberValue = 4;
sheet.Range[1, 5].NumberValue = 4;
sheet.Range[1, 6].NumberValue = 6;

// 添加函數(shù)公式:AVERAGE 平均值
string averageFormula = "=AVERAGE(Sheet1!$A$1:A$6)";
sheet.Range[2, 1].Formula = averageFormula;

// 添加算術(shù)運(yùn)算公式
string calcFormula = "=1+2+3+4+5-6-7+8-9";
sheet.Range[3, 1].Formula = calcFormula;

workbook.SaveToFile("AddFormulasAndFunctions.xlsx", ExcelVersion.Version2016);
workbook.Dispose();

代碼要點(diǎn)解析:

  • 通過 sheet.Range[行, 列].Formula 屬性直接為單元格賦值公式字符串,語(yǔ)法與 Excel 原生公式完全一致。
  • 公式中支持絕對(duì)引用(如 $D$2)和相對(duì)引用(如 F$2),這與 Excel 中的行為相同。
  • 不僅可以添加簡(jiǎn)單的四則運(yùn)算,還可以使用 AVERAGE、SUM、IF 等內(nèi)置函數(shù)。

二、從 Excel 讀取已有公式

在實(shí)際業(yè)務(wù)中,我們經(jīng)常需要解析他人制作的 Excel 報(bào)表,提取其中的計(jì)算邏輯以進(jìn)行審計(jì)、遷移或文檔化。以下代碼演示了如何加載一個(gè)現(xiàn)有的 Excel 文件,遍歷所有已使用的單元格,并找出其中包含公式的單元格。

using Spire.Xls;
using System.IO;
using System.Text;

Workbook workbook = new Workbook();
workbook.LoadFromFile("Formulas.xlsx");

Worksheet sheet = workbook.Worksheets[0];
StringBuilder sb = new StringBuilder();
CellRange usedRange = sheet.AllocatedRange;

foreach (CellRange cell in usedRange)
{
    if (cell.HasFormula)
    {
        string cellName = cell.RangeAddressLocal;
        string formula = cell.Formula;
        sb.AppendLine($"{cellName} 包含公式: {formula}");
    }
}

File.WriteAllText("ReadFormulasAndFunctions.txt", sb.ToString());

代碼要點(diǎn)解析:

  • cell.HasFormula 屬性是一個(gè)布爾值,用于快速判斷單元格是否包含公式。
  • cell.Formula 返回公式的字符串形式,例如 =AVERAGE(D2:F2)。
  • 通過 AllocatedRange 獲取工作表中已使用數(shù)據(jù)的范圍,避免遍歷整個(gè)空白工作表,提升效率。
  • 最終將提取出的公式信息寫入文本文件,便于后續(xù)分析或存檔。

三、實(shí)戰(zhàn)應(yīng)用場(chǎng)景

掌握公式的添加與讀取后,我們可以構(gòu)建許多實(shí)用的自動(dòng)化工具:

  1. 報(bào)表生成器 :自動(dòng)向 Excel 模板寫入原始數(shù)據(jù),并動(dòng)態(tài)添加 SUMCOUNTIF 等統(tǒng)計(jì)公式。
  2. 公式審核工具 :批量讀取財(cái)務(wù)報(bào)表中的復(fù)雜公式,驗(yàn)證其邏輯是否正確,防止人為錯(cuò)誤。
  3. 公式遷移助手 :將舊版 Excel 文件中的公式提取出來,批量應(yīng)用到新版模板的對(duì)應(yīng)位置。
  4. 教學(xué)輔助系統(tǒng) :自動(dòng)批改學(xué)生提交的 Excel 作業(yè),讀取其中的公式判斷解題步驟是否正確。

四、注意事項(xiàng)與建議

  • 公式字符串必須以等號(hào) = 開頭,否則組件會(huì)將其視為普通文本。
  • 公式中引用的單元格范圍必須是有效的,如果引用了不存在的數(shù)據(jù),Excel 打開時(shí)可能顯示 #REF! 錯(cuò)誤。
  • Free Spire.XLS 是免費(fèi)版本,但有一定的頁(yè)數(shù)限制(每個(gè)工作表最多 5 頁(yè))。對(duì)于大多數(shù)中小型項(xiàng)目來說完全夠用。
  • 如果需要處理超大文件或消除頁(yè)數(shù)限制,可以考慮升級(jí)到商業(yè)版 Spire.XLS。

五、知識(shí)擴(kuò)展

在 C# 中處理 Excel 公式,市面上有多種成熟的類庫(kù)可供選擇。一般來說,如果你的應(yīng)用場(chǎng)景是讀取或生成基礎(chǔ)的 Excel 文件,使用 EPPlus 或 ClosedXML 這類開源庫(kù)就足夠了。如果需要進(jìn)行復(fù)雜的公式計(jì)算、處理大規(guī)模數(shù)據(jù)或需要企業(yè)級(jí)支持,那么 Aspose.Cells 會(huì)是更合適的選擇。

下面是幾種主流方案的對(duì)比,可以幫你快速?zèng)Q定。

庫(kù)特性限制適用場(chǎng)景安裝方式 (NuGet)
EPPlus功能豐富,性能優(yōu)秀,社區(qū)活躍5.0版本后商業(yè)使用需授權(quán)非商業(yè)、個(gè)人項(xiàng)目;中小規(guī)模商業(yè)項(xiàng)目Install-Package EPPlus
ClosedXML極其易用,API直觀,基于 OpenXML處理超大型文件時(shí)性能相對(duì)較弱開發(fā)者快速上手,處理中小型文件Install-Package ClosedXML
NPOI免費(fèi)開源,支持 .xls (Excel 97-2003) 和 .xlsx 格式API相對(duì)老舊,部分高級(jí)功能需手動(dòng)實(shí)現(xiàn)需要兼容舊版 Excel 格式 (.xls)Install-Package NPOI
Aspose.Cells企業(yè)級(jí)性能,功能最全面,無需安裝 Excel收費(fèi)高昂大規(guī)模、高復(fù)雜度、企業(yè)級(jí)應(yīng)用Install-Package Aspose.Cells
Microsoft.Office.Interop.Excel官方庫(kù),能實(shí)現(xiàn)Excel的所有功能依賴本地 Excel 組件,性能差,易出錯(cuò)僅限在裝有 Excel 的 Windows 客戶端本地使用需在 Visual Studio 中添加 COM 引用

除了上述通用的公式操作,使用公式前需要確保單元格所在的行或列已經(jīng)創(chuàng)建,特別是在 NPOI 這類庫(kù)中必須嚴(yán)格遵守這個(gè)順序。此外,如果需要數(shù)組公式跨工作表引用,建議使用 NPOI、Aspose.Cells 或 Syncfusion 等支持更完善的庫(kù),在設(shè)置時(shí)可以借助 CellRangeAddress 等對(duì)象來處理。

下面我們從主要操作來演示一下各個(gè)主流庫(kù)的基本用法。

添加公式

// EPPlus
using OfficeOpenXml;
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage())
{
    var sheet = package.Workbook.Worksheets.Add("Sheet1");
    sheet.Cells["A1"].Value = 100;
    sheet.Cells["B1"].Formula = "A1*2"; // 設(shè)置公式
    package.SaveAs(new FileInfo("formula.xlsx"));
}
// ClosedXML
using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Sheet1");
    worksheet.Cell("A1").Value = 100;
    worksheet.Cell("B1").FormulaA1 = "=A1*2"; // 設(shè)置公式
    workbook.SaveAs("formula.xlsx");
}
// NPOI
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("Sheet1");
var row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue(100); // 必須先創(chuàng)建行
row.CreateCell(1).SetCellFormula("A1*2"); // 設(shè)置公式
using (var fs = new FileStream("formula.xlsx", FileMode.Create))
    workbook.Write(fs);
// Aspose.Cells
using Aspose.Cells;
var workbook = new Workbook();
var worksheet = workbook.Worksheets[0];
worksheet.Cells["A1"].PutValue(100);
worksheet.Cells["B1"].Formula = "=A1*2"; // 設(shè)置公式
workbook.Save("formula.xlsx");

讀取公式文本

// EPPlus: 讀取單元格中的公式
string formula = worksheet.Cells["B1"].Formula;
// ClosedXML: 通過 FormulaA1 屬性讀取公式字符串
string formula = worksheet.Cell("B1").FormulaA1;
// NPOI: 獲取包含公式的單元格
ICell cell = sheet.GetRow(0).GetCell(1);
string formula = cell.CellFormula; // 讀取公式文本
// Aspose.Cells: 從單元格獲取公式字符串
string formula = worksheet.Cells["B1"].Formula;

讀取計(jì)算結(jié)果

根據(jù)不同的設(shè)計(jì)目標(biāo),各庫(kù)在讀取計(jì)算結(jié)果時(shí)存在差異。例如,Aspose.Cells 會(huì)自動(dòng)計(jì)算公式值,而 NPOI 則需要顯式調(diào)用計(jì)算引擎。

// EPPlus: 獲取公式計(jì)算結(jié)果
object result = worksheet.Cells["B1"].Value;
// ClosedXML: 獲取公式計(jì)算結(jié)果
object result = worksheet.Cell("B1").Value;
// NPOI: 先通過公式求值器計(jì)算,再讀取結(jié)果
var evaluator = new XSSFFormulaEvaluator(workbook);
ICell cell = sheet.GetRow(0).GetCell(1);
evaluator.EvaluateInCell(cell);
double result = cell.NumericCellValue; // 讀取計(jì)算結(jié)果
// Aspose.Cells: 計(jì)算結(jié)果自動(dòng)更新,直接讀取
object result = worksheet.Cells["B1"].Value;

總結(jié)

  • 最佳選擇:日常開發(fā)推薦 EPPlus(個(gè)人/非商業(yè))和 ClosedXML(簡(jiǎn)單易用)。復(fù)雜企業(yè)級(jí)應(yīng)用推薦 Aspose.Cells。
  • 核心操作:C# 操作 Excel 公式主要有 設(shè)置公式、讀取公式文本 和 讀取計(jì)算結(jié)果 三類操作。
  • 關(guān)鍵特性:使用 NPOI 時(shí)務(wù)必注意操作順序,且數(shù)組公式需要用 ISheet.SetArrayFormula 方法。對(duì)于復(fù)雜公式環(huán)境,謹(jǐn)慎使用依賴本機(jī)的 Microsoft.Office.Interop.Excel 組件。
  • 實(shí)踐建議:建議在開始編碼前,先在Excel里驗(yàn)證公式的正確性,這對(duì)于數(shù)組公式尤其重要。

六、結(jié)語(yǔ)

通過本文的示例代碼,我們可以清晰地看到,使用 Free Spire.XLS for .NET 在 C# 中操作 Excel 公式是非常直觀且高效的。無論是向表格中注入復(fù)雜的計(jì)算邏輯,還是反向解析已有的公式結(jié)構(gòu),這個(gè)組件都提供了完善且易用的 API 接口。希望這篇文章能幫助你在實(shí)際項(xiàng)目中更加得心應(yīng)手地處理 Excel 公式相關(guān)的開發(fā)任務(wù)。

相關(guān)文章

  • 打開一個(gè)Unity工程步驟

    打開一個(gè)Unity工程步驟

    這篇文章講述了如何打開一個(gè)Unity工程,包含詳細(xì)的圖文介紹的步驟,希望本文對(duì)你有所幫助
    2021-06-06
  • C#表達(dá)式和運(yùn)算符詳細(xì)解析

    C#表達(dá)式和運(yùn)算符詳細(xì)解析

    這篇文章主要介紹了C#表達(dá)式和運(yùn)算符詳細(xì)解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • C#借助Spire.XLS實(shí)現(xiàn)自動(dòng)化生成和操作Excel表格

    C#借助Spire.XLS實(shí)現(xiàn)自動(dòng)化生成和操作Excel表格

    Excel中的表格不僅僅是簡(jiǎn)單的數(shù)據(jù)區(qū)域,它具備了排序、篩選、格式化等一系列功能,可以大大提升數(shù)據(jù)處理的效率,本文我們就來簡(jiǎn)單講講如何使用C#實(shí)現(xiàn)在 Excel中高效創(chuàng)建和操作表格吧
    2025-11-11
  • c# 圖片加密解密的實(shí)例代碼

    c# 圖片加密解密的實(shí)例代碼

    這篇文章介紹了c# 圖片加密解密的實(shí)例代碼,有需要的朋友可以參考一下
    2013-08-08
  • C#實(shí)現(xiàn)文字視頻生成器的示例代碼

    C#實(shí)現(xiàn)文字視頻生成器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)簡(jiǎn)易的文字視頻生成器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-10-10
  • 淺談C#中ListView類的用法

    淺談C#中ListView類的用法

    這篇文章主要介紹了淺談C#中ListView的用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C#生成sitemap站點(diǎn)地圖的方法

    C#生成sitemap站點(diǎn)地圖的方法

    C#生成sitemap站點(diǎn)地圖的方法,需要的朋友可以參考一下
    2013-04-04
  • C#使用oledb導(dǎo)出數(shù)據(jù)到excel的方法

    C#使用oledb導(dǎo)出數(shù)據(jù)到excel的方法

    這篇文章主要介紹了C#使用oledb導(dǎo)出數(shù)據(jù)到excel的方法,結(jié)合實(shí)例形式分析了C#操作oledb導(dǎo)出數(shù)據(jù)的相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • C#引用類型和值類型的介紹與實(shí)例

    C#引用類型和值類型的介紹與實(shí)例

    這篇文章主要介紹了C#引用類型和值類型,有需要的朋友可以參考一下
    2013-12-12
  • Unity實(shí)現(xiàn)坦克模型

    Unity實(shí)現(xiàn)坦克模型

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)坦克模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

西青区| 河源市| 海伦市| 景东| 工布江达县| 宽城| 鄂州市| 宿迁市| 大悟县| 安西县| 青岛市| 台州市| 泾川县| 儋州市| 尖扎县| 颍上县| 灵宝市| 云安县| 鞍山市| 通渭县| 南丹县| 营口市| 鄂尔多斯市| 孟津县| 闸北区| 天津市| 绥江县| 隆化县| 花莲县| 衡水市| 吴桥县| 高邑县| 罗源县| 堆龙德庆县| 河南省| 柘城县| 股票| 镇安县| 巴马| 林芝县| 甘德县|