如何通过 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 官方文档,获取更多高级功能示例。

相关推荐
海林OneMoreTime3 小时前
Spring Boot 配置优先级
1024程序员节
张人玉3 小时前
WPF 触发器详解:定义、种类与示例
c#·wpf·1024程序员节·布局控件
Slow菜鸟3 小时前
NVM 安装 (Windows版本)
nvm·1024程序员节
凉虾皮3 小时前
2024包河初中组
学习·算法·1024程序员节
jdlxx_dongfangxing3 小时前
C++ STL 容器与算法详解
开发语言·c++·1024程序员节
PandaCave3 小时前
记录画图笔记
1024程序员节
前端与小赵3 小时前
我的创作纪念日
1024程序员节
最好结果3 小时前
MyBatis 精确查询逗号分隔字符串
mysql·mybatis·1024程序员节
消失的旧时光-19433 小时前
搞懂 Kotlin 的 List、Set、Map、HashMap、LinkedHashMap,以及 asSequence() 的底层原理与实战场景。
kotlin·数据处理·1024程序员节