C#高效实现Excel数据读取入门教程

 更新时间:2025年09月15日 16:05:40   作者:咕白m625  
在 C# 开发中,Excel 数据处理是高频场景—,免费版 Free Spire.XLS恰好能解决这些痛点,下面小编就来详细介绍如何用它实现Excel数据读取吧

在 C# 开发中,Excel 数据处理是高频场景—无论是用户数据导入、业务报表生成,还是简单的数据分析,Excel 都不可或缺。但传统依赖 Microsoft.Office.Interop.Excel 的方案,总会遇到性能差、需装Office环境、部署麻烦等问题。

免费版 Free Spire.XLS恰好能解决这些痛点:无需安装任何Office组件,完全免费且API简洁,足以满足小型项目的Excel读取需求。下面就详细介绍如何用它实现Excel数据读取。

一、环境准备:安装 Free Spire.XLS

1. NuGet安装

有两种方式任选:

  • 右键点击项目 → 「管理NuGet程序包」→ 切换到「浏览」,搜索“FreeSpire.XLS”,找到后点击「安装」。
  • 打开「NuGet包管理器控制台」,输入以下命令并回车:
install-package FreeSpire.XLS

2. 验证安装

安装完成后,展开项目的「引用」文件夹,若能看到 FreeSpire.XLS 程序集,说明免费版已成功集成。

注意:免费版有数据量限制,适合小型数据处理场景。

二、3分钟快速上手:基础单元格读取

1. 引入命名空间

在代码文件顶部添加 Spire.XLS 命名空间,确保能调用核心类:

using Spire.Xls;

2. 编写基础读取代码

支持读取 XLS 和 XLSX 文件,提供“列名定位”和“行号列号定位”两种方式,代码如下:

// 1. 初始化工作簿,加载Excel文件(替换为你的文件路径)
Workbook workbook = new Workbook();
workbook.LoadFromFile("测试数据.xlsx");

// 2. 获取第一个工作表(索引从0开始)
Worksheet targetSheet = workbook.Worksheets[0];

// 3. 读取指定单元格数据
Console.WriteLine("通过列名读取(A1单元格):" + targetSheet.Range["A1"].Value);
Console.WriteLine("通过行号列号读取(第2行第1列):" + targetSheet.Range[2, 1].Value);

3.关键提醒

用「行号+列号」定位时,索引从1开始(而非 C# 常规的0索引),比如“第3行第2列”需写为Range[3, 2],若误写为Range[3, 1]会定位到错误单元格。

三、批量读取:遍历整个工作表数据

若需读取Excel中所有有效数据(如批量导入到数据库),可通过“有效数据区域”遍历,避免读取空单元格。完整代码如下:

using Spire.Xls;

namespace ExcelRead
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 加载Excel文件
                Workbook workbook = new Workbook();
                workbook.LoadFromFile("产品数据.xlsx");

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

                // 获取“有效数据区域”(仅包含有数据的单元格,减少资源占用)
                CellRange validRange = dataSheet.AllocatedRange;

                // 外层循环遍历行
                for (int rowIdx = 0; rowIdx < validRange.Rows.Length; rowIdx++)
                {
                    // 内层循环遍历当前行的列
                    for (int colIdx = 0; colIdx < validRange.Rows[rowIdx].ColumnCount; colIdx++)
                    {
                        // 单元格索引从1开始,需对循环变量+1
                        string cellData = validRange[rowIdx + 1, colIdx + 1].Value;
                        Console.Write(cellData + "  ");
                    }
                    Console.WriteLine(); // 一行结束后换行
                }

                Console.WriteLine("读取完成!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("读取失败:" + ex.Message);
            }
        }
    }
}

四、特殊场景:读取公式与计算结果

若 Excel 单元格包含公式(如=A2+B2),直接用 Value 属性会返回公式文本,而非计算结果。Free Spire.XLS支持获取公式结果,代码如下:

// 遍历有效数据区域的所有单元格
foreach (CellRange cell in dataSheet.AllocatedRange)
{
    // 判断单元格是否包含公式
    if (cell.HasFormula)
    {
        // 1. 读取原始公式(如“=A2+B2”)
        string formulaText = cell.Formula;

        // 2. 读取公式计算后的结果
        string formulaResult = cell.FormulaValue.ToString();

        // 输出结果
        Console.WriteLine($"单元格{cell.RangeAddress}:");
        Console.WriteLine($"  公式:{formulaText}");
        Console.WriteLine($"  结果:{formulaResult}\n");
    }
}

Excel 数据处理是 C# 开发中的基础需求,Free Spire.XLS for .NET 不仅摆脱了对 Office 环境的依赖,还通过简洁的 API 降低了开发门槛 — 无论是基础的单元格读取、批量数据遍历,还是特殊的公式结果获取,都能高效实现。

到此这篇关于C#高效实现Excel数据读取入门教程的文章就介绍到这了,更多相关C#读取Excel数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#如何将List<string>转换为List<double>

    C#如何将List<string>转换为List<double>

    这篇文章主要介绍了C#如何将List<string>转换为List<double>问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • C# SQLite执行效率的优化教程

    C# SQLite执行效率的优化教程

    这篇文章主要给大家介绍了关于C# SQLite执行效率优化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C# SQLite具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • C#中Thread(线程)和Task(任务)实例详解

    C#中Thread(线程)和Task(任务)实例详解

    .NET Framework在System.Threading命名空间中具有与线程相关的类,线程是一小组可执行指令,这篇文章主要给大家介绍了关于C#中Thread(线程)和Task(任务)的相关资料,需要的朋友可以参考下
    2022-03-03
  • C#心跳机制客户端的实现示例

    C#心跳机制客户端的实现示例

    本文主要介绍了C#心跳机制客户端,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • C# 中的委托与事件实现灵活的回调机制(应用场景分析)

    C# 中的委托与事件实现灵活的回调机制(应用场景分析)

    委托提供了一种类型安全的方式将方法作为参数传递,而事件则允许对象通知其他对象发生了某些事情,这篇文章主要介绍了C# 中的委托与事件实现灵活的回调机制,需要的朋友可以参考下
    2024-12-12
  • c#中的正则表达式和日期的使用示例

    c#中的正则表达式和日期的使用示例

    在 C# 中,正则表达式(Regular Expressions)是一种强大的文本处理工具,用于执行各种字符串搜索、替换和验证任务,这篇文章主要介绍了c#中的正则表达式和日期的使用示例,需要的朋友可以参考下
    2024-07-07
  • C#高效比较两个DataTable数据差异化的方法实现

    C#高效比较两个DataTable数据差异化的方法实现

    本文主要介绍了C#高效比较两个DataTable数据差异化的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C#实现通过程序自动抓取远程Web网页信息的代码

    C#实现通过程序自动抓取远程Web网页信息的代码

    C#实现通过程序自动抓取远程Web网页信息的代码...
    2007-04-04
  • C#实现简单的窗口抖动

    C#实现简单的窗口抖动

    这篇文章主要为大家详细介绍了C#实现简单的窗口抖动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C#解决多IfElse判断语句和Switch语句问题的方法分享

    C#解决多IfElse判断语句和Switch语句问题的方法分享

    这篇文章主要为大家介绍C#如何使用设计模式中的策略模式和委托来解决多个IfElse判断语句和Switch语句,这种替换方式在其他语言也一样可以做到,感兴趣的可以了解一下
    2022-12-12

最新评论