it编程 > 编程语言 > Asp.net

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

5人参与 2025-10-26 Asp.net

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

一、环境准备

free spire.xls for .net 是一款专门用于处理 excel 文件的免费 c# 库,相比 epplus 等同类工具,它能更精细地控制 excel 工作表(如格式设置、公式计算、图表生成等)。

开始前需要先通过 nuget 快速安装该免费库:

或者打开「程序包管理器控制台」,执行以下命令:

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)
        {
            // 加载 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)")
                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 文件(如生成包含「销售数据」「利润分析」的多表报表)。

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 中添加数据并美化格式(如生成带样式的员工报表、销售清单)。

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 轻量级场景的优选工具。免费版虽有数据量限制,但足以满足中小型项目的报表生成、数据导入导出等需求。

到此这篇关于c#实现高效读写excel工作表的文章就介绍到这了,更多相关c#读写excel工作表内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

C#实现自动修复磁盘错误的方法详解

10-26

通过C#实现给Word文档添加文字和图片水印

10-24

C#日志存储优化的五种方法

10-24

基于C#实现二维码和条形码生成与打印

10-22

C#中轻松实现Word文档打印的示例详解

10-22

C#计算一段程序运行时间的多种方法总结

10-22

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论