开发者

C#实现高效读写Excel工作表

开发者 https://www.devze.com 2025-10-26 10:28 出处:网络 作者: Eiceblue
目录一、环境准备二、通过 C# 读取 Excel 数据2.1 读取指定单元格数据2.2 读取整个工作表数据2.3 读取公式与公式计算结果三、通过 C# 写入 Excel 数据3.1 创建含多工作表的新工作簿3.2 向现有文件追加数据并格式化Ex
目录
  • 一、环境准备
  • 二、通过 C# 读取 Excel 数据
    • 2.1 读取指定单元格数据
    • 2.2 读取整个工作表数据
    • 2.3 读取公式与公式计算结果
  • 三、通过 C# 写入 Excel 数据
    • 3.1 创建含多工作表的新工作簿
    • 3.2 向现有文件追加数据并格式化

Excel 是各行业数据管理的核心载体,广泛应用于财务统计、库存管理、报表生成等场景。对于 C# 开发者而言,掌握高效的 Excel 读写能力,是实现数据自动化处理、业务报表生成的关键。本文基于免费库 Free Spire.XLS for .NET,通过环境准备→实战示例的逻辑,带你从零掌握 C# 读写 Excel 的核心技巧。

一、环境准备

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)
        {
            // http://www.devze.com加载 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)")
                phpstring 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.XlshdUTTnxaBF;

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月员工销售业绩";
            // 设置标题样式:蓝色粗体、居中对齐、行高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); // Bhttp://www.devze.com列
            sheet.SetColumnWidth(3, 15); // C列
            sheet.SetColumnWidth(4, 12); // D列

            // 添加边框(美化表格)
            CellRange dataRange = sheet.Range["A2:D3"];
            dataRange.BorderAround(LineStyleType.Medium); // 外边框
            dataRange.BorderInside(LineStyleType.Thin);    // 内边框

            // 保存文件
        hdUTTnxaBF    workbook.SaveToFile("FormattedSalesReport.xlsx", ExcelVersion.Version2016);
            workbook.Dispose();
        }
    }
}

总结:Free Spire.XLS for .NET 以「低门槛、高兼容性」的特点,成为 C# 处理 Excel 轻量级场景的优选工具。免费版虽有数据量限制,但足以满足中小型项目的报表生成、数据导入导出等需求。

到此这篇关于C#实现高效读写Excel工作表的文章就介绍到这了,更多相关C#读写Excel工作表内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号