如何在 C# 中创建、读取和更新 Excel 文档

Chloe
Chloe
发布时间:2026-08-24 | 14人浏览过
原创

前言

在 C# 项目里处理 Excel,看似只是文件读写,实际往往牵扯部署环境、性能表现和后续维护成本。本文用 Spire.XLS for .NET 把创建、读取、更新三类常见操作拆开讲清楚,同时对比 COM Interop 的局限,帮助你判断自己的项目应该选哪种实现方式,以及关键 API 该如何落地。

在 C# 项目里操作 Excel,常见场景并不只是“导出一个表”这么简单,还包括数据导入、批量更新、报表生成和后续样式整理。很多团队一开始会接触 COM Interop,但一旦遇到服务器部署、Office 依赖、版本兼容或大批量处理,成本就会迅速上升。

这篇文章换一个更实用的角度,直接用 Spire.XLS for .NET 来完成创建、读取和更新 Excel 文档三类核心任务。你可以据此判断:当前项目是否适合放弃 COM Interop,改用独立库来处理 Excel 文件,以及对应 API 在代码里该怎么落地。

为什么不再优先选择 COM Interop

在 C# 中实现 Excel 文件的创建、读取、更新等操作,传统做法常常是直接调用 Office COM Interop。但这种方案在实际项目里通常会很快暴露出问题。

展示 Spire.XLS 替代 COM Interop 的选型依据,包括 Office 依赖、性能、跨平台和 API 易用性四个维度。
C# 操作 Excel 的方案对比用四个维度快速判断,为什么在现代 C# 项目里,独立 Excel 库通常比 COM。

COM Interop 的几个典型限制

首先,它要求目标机器已经安装 Office,这会直接增加部署复杂度;其次,不同 Office 版本之间可能出现兼容性问题,线上环境也更难统一;再者,处理大量数据时,COM Interop 的性能通常不够理想。对于需要运行在 .NET Core 或更高版本跨平台环境中的项目,它也不是一个轻量方案。

Spire.XLS for .NET 适合解决什么问题

Spire.XLS for .NET 的优势在于可以独立运行,不依赖本机 Office 安装,同时提供相对直观的 API,用来处理 Excel 创建、读取和样式更新都比较直接。原文提到,它支持 .NET Framework、.NET Core 以及 .NET 5+,因此更适合作为通用的 Excel 文件处理方案。

先完成环境准备与安装

开始写代码前,先把 Spire.XLS 安装到项目中。可以通过 NuGet 图形界面搜索安装,也可以直接使用包管理器控制台命令:

Install-Package Spire.XLS

如果你的目标是尽快验证 Excel 文件读写流程,这一步完成后就可以直接进入代码实践。

如何创建一个新的 Excel 文档

创建工作簿、生成工作表并写入基础数据,是最常见的 Excel 导出入口。下面这段代码展示了完整流程:新建工作簿、创建 1 个空工作表、向单元格写入文本和数字,最后保存为 NewExcelDocument.xlsx。

// 创建一个新的工作簿对象
Workbook workbook = new Workbook();

// 创建一个空的工作表
workbook.CreateEmptySheets(1);

// 获取第一个工作表的引用
Worksheet sheet = workbook.Worksheets[0];

// 填充一些数据
sheet.Range["A1"].Text = "姓名";
sheet.Range["B1"].Text = "年龄";
sheet.Range["A2"].Text = "张三";
sheet.Range["B2"].NumberValue = 30;
sheet.Range["A3"].Text = "李四";
sheet.Range["B3"].NumberValue = 25;

// 保存到文件
string filePath = "NewExcelDocument.xlsx";
workbook.SaveToFile(filePath, ExcelVersion.Version2016);
workbook.Dispose();
Console.WriteLine($"已创建新Excel文件: {filePath}");

创建场景里最常用的几个 API

这段代码里,Workbook 表示整个 Excel 文件,Worksheet 表示工作表,Range 用于定位单元格或单元格区域,SaveToFile 用于输出文件。这里保存时使用的是 ExcelVersion.Version2016,如果你的项目需要固定目标格式,这个参数值得明确保留。

如何读取现有 Excel 文档中的数据

读取 Excel 常见于导入、校验和分析流程。这里的思路分为两步:先按坐标读取指定单元格,再按行列遍历整个有效区域。

// 加载一个现有的Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("NewExcelDocument.xlsx");

// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];

// 读取单元格数据
string name = sheet.Range["A2"].Text;
double age = sheet.Range["B2"].NumberValue;

Console.WriteLine($"读取到数据 - 姓名: {name}, 年龄: {age}");

// 遍历读取所有数据 (假设有数据区域)
for (int row = 1; row <= sheet.LastRow; row++)
{
    for (int col = 1; col <= sheet.LastColumn; col++)
    {
        Console.Write($"{sheet.Range[row, col].Text}t");
    }
    Console.WriteLine();
}

workbook.Dispose();

读取时要关注的取值方式

如果单元格是文本内容,可以直接使用 Text;如果是数值型数据,则可以使用 NumberValue。加载文件使用的是 Workbook.LoadFromFile,而遍历范围时依赖 sheet.LastRow 和 sheet.LastColumn,适合快速扫描当前工作表中的有效数据区域。

对于需要做导入校验的场景,这种“指定单元格读取 + 全表遍历”的组合通常已经能覆盖大多数需求。

如何更新 Excel 中已有的数据和样式

如果你面对的是已有文件的维护,而不是从零生成,那么重点通常有三个:改单元格值、插入新行,以及同步样式。

展示使用 Spire.XLS 创建、读取、更新 Excel 文件的核心 API 与操作路径。
Spire.XLS 三类核心操作路径把三类高频操作拆开看,创建、读取、更新分别依赖哪些对象和 API,一张图就能快速对照。
// 加载一个现有的Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("NewExcelDocument.xlsx");

// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];

// 修改特定单元格内容
sheet.Range["B2"].NumberValue = 32; // 张三的年龄更新为32

// 插入新行
sheet.InsertRow(4); // 在第4行插入一行
sheet.Range["A4"].Text = "王五";
sheet.Range["B4"].NumberValue = 28;

// 更新单元格样式
sheet.Range["A1:B1"].Style.Font.IsBold = true; // 标题行加粗
sheet.Range["A1:B1"].Style.KnownColor = ExcelKnownItems.LightYellow; // 标题行背景色

// 保存修改
string updatedFilePath = "UpdatedExcelDocument.xlsx";
workbook.SaveToFile(updatedFilePath, ExcelVersion.Version2016);
workbook.Dispose();
Console.WriteLine($"已更新Excel文件: {updatedFilePath}");

更新场景里的常见操作

这段代码分别演示了三类典型动作:

  • 通过 sheet.Range["B2"].NumberValue = 32 直接更新已有单元格内容;
  • 通过 sheet.InsertRow(4) 在第 4 行插入新记录;
  • 通过 Style.Font.IsBold 和 Style.KnownColor 给标题区域补充样式。

最后使用 workbook.SaveToFile(updatedFilePath, ExcelVersion.Version2016) 另存为 UpdatedExcelDocument.xlsx。这种写法比较适合保留原始文件,避免更新时直接覆盖源数据。

实际使用时可以记住什么

如果你的需求集中在 Excel 文件的创建、读取和更新,Spire.XLS for .NET 这类独立库确实比 COM Interop 更适合现代 C# 项目。它减少了 Office 依赖带来的部署问题,也更容易在 .NET Framework、.NET Core 和 .NET 5+ 项目中统一处理。

从本文示例看,核心思路并不复杂:创建时围绕 Workbook、Worksheet、Range 和 SaveToFile 展开;读取时掌握 LoadFromFile、Text、NumberValue 与行列遍历;更新时重点关注改单元格、插入行和样式处理。对于报表生成、导入导出和批量数据维护,这已经是一套足够实用的起点。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表