如何通过 C# 高效读写 Excel 工作表
Excel 是各行业数据管理的核心载体,广泛应用于财务统计、库存管理、报表生成等场景。对于 C# 开发者而言,掌握高效的 Excel 读写能力,是实现数据自动化处理、业务报表生成的关键。本文基于免费库 Free Spire.XLS for .NET,通过环境准备→实战示例的逻辑,带你从零掌握 C# 读写 Excel 的核心技巧。
文章目录
- 一、环境准备
- 二、通过 C# 读取 Excel 数据
- 2.1 读取指定单元格数据
- 2.2 读取整个工作表数据
- 2.3 读取公式与公式计算结果
- 三、通过 C# 写入 Excel 数据
- 3.1 创建含多工作表的新工作簿
- 3.2 向现有文件追加数据并格式化
一、环境准备
Free Spire.XLS for .NET 是一款专门用于处理 Excel 文件的免费 C# 库,相比 EPPlus 等同类工具,它能更精细地控制 Excel 工作表(如格式设置、公式计算、图表生成等)。
开始前需要先通过 NuGet 快速安装该免费库:
- 打开 Visual Studio,右键点击项目 → 选择「管理 NuGet 程序包」。
- 在「浏览」页搜索 FreeSpire.XLS,点击「安装」即可完成。
或者打开「程序包管理器控制台」,执行以下命令:
Install-Package FreeSpire.XLS
注意:免费版存在部分限制(如单文件最大支持 500 行数据)。
二、通过 C# 读取 Excel 数据
从「读取特定单元格」到「提取公式结果」,覆盖开发中最常用的 3 类读取场景,示例代码可直接运行。
2.1 读取指定单元格数据
适用场景:获取 Excel 中固定位置的关键数据(如报表标题、汇总结果)。
using Spire.Xls;
using System;namespace ReadExcelData
{class Program{static void Main(string[] args){// 加载 Excel 文档Workbook wb = new Workbook();wb.LoadFromFile("示例.xlsx");//获取第一张工作表Worksheet sheet = wb.Worksheets[0];// 获取指定单元格的数据Console.Write(sheet.Range["B4"].Value);Console.WriteLine();}}
}
2.2 读取整个工作表数据
适用场景:批量获取工作表中所有数据(如导入 Excel 表格到数据库)。
using Spire.Xls;
using System;namespace ReadExcelData
{class Program{static void Main(string[] args){// 加载 Excel 文档Workbook wb = new Workbook();wb.LoadFromFile("示例.xlsx");// 获取第一张工作表Worksheet sheet = wb.Worksheets[0];// 获取数据有效范围(仅遍历有数据的单元格,避免空白行/列无效循环)CellRange locatedRange = sheet.AllocatedRange;//遍历各行for (int i = 0; i < locatedRange.Rows.Length; i++){//遍历各列for (int j = 0; j < locatedRange.Rows[i].ColumnCount; j++){// 读取单元格数据并输出Console.Write(locatedRange[i + 1, j + 1].Value + " ");}Console.WriteLine();}}}
}
2.3 读取公式与公式计算结果
适用场景:需要获取 Excel 中公式的原始表达式,或其计算后的最终结果(如财务报表中的自动求和结果)。
using Spire.Xls;
using System;namespace ExcelReadDemo
{class FormulaReadDemo{static void Main(string[] args){// 加载 Excel 文档Workbook workbook = new Workbook();workbook.LoadFromFile("DataSample.xlsx");// 获取第一张工作表Worksheet sheet = workbook.Worksheets[0];// 指定包含公式的目标单元格(如 E3)CellRange formulaCell = sheet.Range["E3"];// 检查单元格是否包含公式if (formulaCell.HasFormula){Console.WriteLine("该单元格包含公式:");// 读取公式原始表达式(如 "SUM(B3:D3)")string formula = formulaCell.Formula;Console.WriteLine($"公式表达式:{formula}");// 读取公式计算结果(自动执行计算逻辑)object formulaResult = formulaCell.FormulaValue;Console.WriteLine($"公式计算结果:{formulaResult}");}else{Console.WriteLine("该单元格不包含公式");}workbook.Dispose();Console.ReadKey();}}
}
三、通过 C# 写入 Excel 数据
从「创建新工作簿」到「格式化数据写入」,覆盖报表生成、数据追加等核心写入场景。
3.1 创建含多工作表的新工作簿
适用场景:从零构建 Excel 文件(如生成包含「销售数据」「利润分析」的多表报表)。
using Spire.Xls;namespace ExcelWriteDemo
{class NewWorkbookDemo{static void Main(string[] args){// 初始化空工作簿Workbook workbook = new Workbook();// 清除默认空白工作表(可选,根据需求保留)workbook.Worksheets.Clear();// 添加 3 个新工作表workbook.CreateEmptySheets(3);// 重命名工作表(提升文件可读性)workbook.Worksheets[0].Name = "月度销售数据";workbook.Worksheets[1].Name = "库存统计";workbook.Worksheets[2].Name = "利润分析";// 保存文件(指定路径和 Excel 版本,支持 2007/2010/2016 等)workbook.SaveToFile("SalesReport.xlsx", ExcelVersion.Version2016);workbook.Dispose();}}
}
3.2 向现有文件追加数据并格式化
适用场景:在已有 Excel 中添加数据并美化格式(如生成带样式的员工报表、销售清单)。
using Spire.Xls;
using System.Drawing;namespace ExcelWriteDemo
{class DataWriteWithFormatDemo{static void Main(string[] args){// 加载已有的 Excel 文件Workbook workbook = new Workbook();workbook.LoadFromFile("SalesReport.xlsx");// 获取目标工作表Worksheet sheet = workbook.Worksheets[0];// 写入标题(合并单元格 + 格式化)// 合并 A1:D1 单元格作为标题栏sheet.Range["A1:D1"].Merge();sheet.Range["A1"].Text = "2024年1月员工销售业绩";// 设置标题样式:蓝色粗体、居中对齐、行高25sheet.Range["A1"].Style.Font.IsBold = true;sheet.Range["A1"].Style.Font.Color = Color.Blue;sheet.Range["A1"].HorizontalAlignment = HorizontalAlignType.Center;sheet.Rows[0].RowHeight = 25;// 写入业务数据(支持文本、数值等类型)sheet.Range["A2"].Value = "张三";sheet.Range["B2"].Value = "1月";sheet.Range["C2"].Value2 = 58000; // 数值类型sheet.Range["D2"].Value = "销售一部";sheet.Range["A3"].Value = "李四";sheet.Range["B3"].Value = "1月";sheet.Range["C3"].Value2 = 62000;sheet.Range["D3"].Value = "销售二部";// 调整列宽(适配内容,避免文字截断)sheet.SetColumnWidth(1, 12); // A列sheet.SetColumnWidth(2, 10); // B列sheet.SetColumnWidth(3, 15); // C列sheet.SetColumnWidth(4, 12); // D列// 添加边框(美化表格)CellRange dataRange = sheet.Range["A2:D3"];dataRange.BorderAround(LineStyleType.Medium); // 外边框dataRange.BorderInside(LineStyleType.Thin); // 内边框// 保存文件workbook.SaveToFile("FormattedSalesReport.xlsx", ExcelVersion.Version2016);workbook.Dispose();}}
}
总结:Free Spire.XLS for .NET 以「低门槛、高兼容性」的特点,成为 C# 处理 Excel 轻量级场景的优选工具。免费版虽有数据量限制,但足以满足中小型项目的报表生成、数据导入导出等需求。
🚀 查看 Free Spire.XLS 官方文档,获取更多高级功能示例。
