使用 C# 添加或读取 Excel 公式:完整指南

在日常的办公数据处理任务中,Excel 公式和函数是自动化计算和数据分析的基石。对于 .NET 开发者而言,如何通过编程方式向 Excel 文件注入公式,或者从已有的表格中提取公式逻辑,是一个常见且实用的需求。本文将借助 Free Spire.XLS for .NET 这款轻量级且免费的组件,详细演示如何使用 C# 实现 Excel 公式的添加与读取操作。

准备工作:引入 Free Spire.XLS

在开始编码之前,我们需要在项目中引入 Free Spire.XLS for .NET。该组件可以通过 NuGet 包管理器轻松安装,在包控制台中执行以下命令即可:

复制代码
Install-Package FreeSpire.XLS

安装完成后,我们就可以在代码中通过 using Spire.Xls; 命名空间来访问所有 Excel 操作相关的类与方法。

一、向 Excel 添加公式

添加公式的场景非常广泛,例如批量计算销售总额、统计学生平均分、生成动态报表等。下面的示例展示了如何创建一个新的 Excel 工作簿,并在其中写入基础数据,然后为指定单元格添加公式。

复制代码
using Spire.Xls;

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

// 添加基础数值数据
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;

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

// 添加算术运算公式
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();

代码要点解析:

  • 通过 sheet.Range[行, 列].Formula 属性直接为单元格赋值公式字符串,语法与 Excel 原生公式完全一致。
  • 公式中支持绝对引用(如 $D$2)和相对引用(如 F$2),这与 Excel 中的行为相同。
  • 不仅可以添加简单的四则运算,还可以使用 AVERAGESUMIF 等内置函数。

二、从 Excel 读取已有公式

在实际业务中,我们经常需要解析他人制作的 Excel 报表,提取其中的计算逻辑以进行审计、迁移或文档化。以下代码演示了如何加载一个现有的 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());

代码要点解析:

  • cell.HasFormula 属性是一个布尔值,用于快速判断单元格是否包含公式。
  • cell.Formula 返回公式的字符串形式,例如 =AVERAGE(D2:F2)
  • 通过 AllocatedRange 获取工作表中已使用数据的范围,避免遍历整个空白工作表,提升效率。
  • 最终将提取出的公式信息写入文本文件,便于后续分析或存档。

三、实战应用场景

掌握公式的添加与读取后,我们可以构建许多实用的自动化工具:

  1. 报表生成器 :自动向 Excel 模板写入原始数据,并动态添加 SUMCOUNTIF 等统计公式。
  2. 公式审核工具 :批量读取财务报表中的复杂公式,验证其逻辑是否正确,防止人为错误。
  3. 公式迁移助手 :将旧版 Excel 文件中的公式提取出来,批量应用到新版模板的对应位置。
  4. 教学辅助系统 :自动批改学生提交的 Excel 作业,读取其中的公式判断解题步骤是否正确。

四、注意事项与建议

  • 公式字符串必须以等号 = 开头,否则组件会将其视为普通文本。
  • 公式中引用的单元格范围必须是有效的,如果引用了不存在的数据,Excel 打开时可能显示 #REF! 错误。
  • Free Spire.XLS 是免费版本,但有一定的页数限制(每个工作表最多 5 页)。对于大多数中小型项目来说完全够用。
  • 如果需要处理超大文件或消除页数限制,可以考虑升级到商业版 Spire.XLS。

结语

通过本文的示例代码,我们可以清晰地看到,使用 Free Spire.XLS for .NET 在 C# 中操作 Excel 公式是非常直观且高效的。无论是向表格中注入复杂的计算逻辑,还是反向解析已有的公式结构,这个组件都提供了完善且易用的 API 接口。希望这篇文章能帮助你在实际项目中更加得心应手地处理 Excel 公式相关的开发任务。

相关推荐
磊 子1 小时前
多继承和多态性
开发语言·c++
加号31 小时前
【C#】 中 BCD 字节数组转十进制字符串的原理与实现思路
开发语言·c#
AbandonForce1 小时前
C++11:列表初始化||右值和移动语义||引用折叠和完美转发||可变参数模板||lambda表达式||包装器(function bind)
开发语言·数据结构·c++·算法
jghhh011 小时前
燃料电池电源 Matlab 仿真方案
开发语言·matlab
萨小耶1 小时前
[Java学习日记07】聊聊接口和抽象类
java·开发语言·学习
Brilliantwxx1 小时前
【C++】模版进阶(特化+分离编译+非类型模版参数)
开发语言·数据结构·c++·算法
开开心心就好1 小时前
免费开源的网课教学屏幕画板工具
windows·eureka·计算机外设·word·excel·etcd·csdn开发云
折哥的程序人生 · 物流技术专研1 小时前
《Java面试85题图解版(三)》上篇:高阶架构设计篇
java·开发语言·后端·面试·职场和发展
周杰伦fans1 小时前
C# 从 List 中移除另一个集合
windows·c#