如何通过 C# 高效读写 Excel 工作表

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 快速安装该免费库:

  1. 打开 Visual Studio,右键点击项目 → 选择「管理 NuGet 程序包」。
  2. 在「浏览」页搜索 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 官方文档,获取更多高级功能示例。

相关推荐
南無忘码至尊1 小时前
Unity学习90天-第2天-认识键盘 / 鼠标输入(PC)并实现WASD 移动,鼠标控制物体转向
学习·unity·c#·游戏开发
学传打活1 小时前
古代汉语是源,现代汉语是流,源与流一脉相承。
微信公众平台·1024程序员节·汉字·中华文化
William_cl2 小时前
C# ASP.NET 分层架构实战:BLL (Service) 业务层从入门到封神(规范 + 避坑)
架构·c#·asp.net
△曉風殘月〆2 小时前
一文带你掌握Visual Studio中集成的git功能
git·visual studio
m0_716765233 小时前
数据结构--顺序表的插入、删除、查找详解
c语言·开发语言·数据结构·c++·学习·算法·visual studio
qq_454245033 小时前
图数据标准化与智能去重框架:设计与实现解析
数据结构·架构·c#·图论
CSharp精选营3 小时前
C# 如何减少代码运行时间:7 个实战技巧
性能优化·c#·.net·技术干货·实战技巧
hhh3u3u3u16 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
加号316 小时前
【C#】实现沃德普线光控制器通信控制(附完整源码)
开发语言·c#
lzhdim17 小时前
SharpCompress:跨平台的 C# 压缩与解压库
开发语言·c#