Excel 是各行业数据管理的核心载体,广泛应用于财务统计、库存管理、报表生成等场景。对于 C# 开发者而言,掌握高效的 Excel 读写能力,是实现数据自动化处理、业务报表生成的关键。本文基于免费库 Free Spire.XLS for .NET,通过环境准备→实战示例的逻辑,带你从零掌握 C# 读写 Excel 的核心技巧。
文章目录
-
-
- 一、环境准备
- [二、通过 C# 读取 Excel 数据](# 读取 Excel 数据)
-
- [2.1 读取指定单元格数据](#2.1 读取指定单元格数据)
- [2.2 读取整个工作表数据](#2.2 读取整个工作表数据)
- [2.3 读取公式与公式计算结果](#2.3 读取公式与公式计算结果)
- [三、通过 C# 写入 Excel 数据](# 写入 Excel 数据)
-
- [3.1 创建含多工作表的新工作簿](#3.1 创建含多工作表的新工作簿)
- [3.2 向现有文件追加数据并格式化](#3.2 向现有文件追加数据并格式化)
-
一、环境准备
Free Spire.XLS for .NET 是一款专门用于处理 Excel 文件的免费 C# 库,相比 EPPlus 等同类工具,它能更精细地控制 Excel 工作表(如格式设置、公式计算、图表生成等)。
开始前需要先通过 NuGet 快速安装该免费库:
- 打开 Visual Studio,右键点击项目 → 选择「管理 NuGet 程序包」。
- 在「浏览」页搜索 FreeSpire.XLS,点击「安装」即可完成。
或者打开「程序包管理器控制台」,执行以下命令:
powershell
Install-Package FreeSpire.XLS
注意:免费版存在部分限制(如单文件最大支持 500 行数据)。
二、通过 C# 读取 Excel 数据
从「读取特定单元格」到「提取公式结果」,覆盖开发中最常用的 3 类读取场景,示例代码可直接运行。
2.1 读取指定单元格数据
适用场景:获取 Excel 中固定位置的关键数据(如报表标题、汇总结果)。
csharp
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 表格到数据库)。
csharp
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 中公式的原始表达式,或其计算后的最终结果(如财务报表中的自动求和结果)。
csharp
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 文件(如生成包含「销售数据」「利润分析」的多表报表)。
csharp
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 中添加数据并美化格式(如生成带样式的员工报表、销售清单)。
csharp
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月员工销售业绩";
// 设置标题样式:蓝色粗体、居中对齐、行高25
sheet.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 官方文档,获取更多高级功能示例。