C#测试Excel开源组件ExcelDataReader

使用微软的com组件Microsoft.office.Interop.Excel读写Excel文件虽然可用,但是列多、行多的时候速度很慢,之前测试过Sylvan.Data.Excel包的用法,如果只是读取Excel文件内容的话,还可以使用ExcelDataReader包,后者是C#开源、轻量化、快速的Excel文件读取库,支持读取xlsx、xlsb、xls、csv格式的文件。本文学习并测试ExcelDataReader包的基本用法。
  新建Winform项目,在Nuget包管理器中搜索并安装ExcelDataReader。

  ExcelDataReader包中最重要的是ExcelReaderFactory类和IExcelDataReader接口,前者根据不同的文件格式创建对应的数据读取类(也即IExcelDataReader接口实现类),后者用于操作excel文件。IExcelDataReader的常用函数或属性如下:

序号 函数或属性 说明
1 Read 读取当前工作簿中的一行数据
2 NextResult 切换到当前文件的下一工作簿
3 ResultsCount 获取当前文件的工作簿数量
4 FieldCount 返回当前工作簿中的列数量
5 RowCount 返回当前工作簿中的行数量
6 GetValue 获取当前工作簿通过Read函数获取的一行数据中指定列的数据,返回值类型为object,同理还有GetDouble、GetInt32、GetBoolean、GetDateTime、GetString函数,返回指定类型的数据
7 GetColumnWidth 返回列宽,如果列是隐藏状态,则返回 0
8 RowHeight 返回行高 ,如果行是隐藏状态,则返回 0

下方为基本的测试代码,不同于Sylvan.Data.Excel包有专门的函数获取列名,ExcelDataReader需要自己写代码获取列名(其实就是先调用一次Read函数),然后再继续读取下面的数据。

csharp 复制代码
using (var stream = File.Open(txtFileName.Text, FileMode.Open, FileAccess.Read))
{
    using (var reader = ExcelReaderFactory.CreateReader(stream))
    {
        reader.Read();

        for (int i = 0; i < reader.FieldCount; i++)
        {
            DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
            column.HeaderText = reader.GetString(i);
            dgvData.Columns.Add(column);
        }

        while (reader.Read())
        {
            DataGridViewRow dataGridViewRow = new DataGridViewRow();
            dataGridViewRow.CreateCells(dgvData);

            for (int i = 0; i < reader.FieldCount; i++)
            {
                dataGridViewRow.Cells[i].Value = reader.GetValue(i);
            }

            dgvData.Rows.Add(dataGridViewRow);
        }
    }
}

程序运行时遇到下面的报错,百度该错误,找到参考文献3,其中说到要安装System.Text .Encoding.CodePages包,同时在项目的program文件中增加下面的一行代码,照做后问题解决。

csharp 复制代码
static void Main()
{
    ApplicationConfiguration.Initialize();
	//增加下面一行代码
    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
    Application.Run(new Form1());
}

最后是程序运行效果,如下图所示:

参考文献:

1\]https://zhuanlan.zhihu.com/p/18555606219 \[2\]https://github.com/ExcelDataReader/ExcelDataReader \[3\]https://blog.csdn.net/qq_41545233/article/details/122198747

相关推荐
了一li21 分钟前
C#中用 OxyPlot 在 WinForms 实现波形图可视化(附源码教程)
开发语言·c#
大模型铲屎官27 分钟前
Unity C# 与 Shader 交互入门:脚本动态控制材质与视觉效果 (含 MaterialPropertyBlock 详解)(Day 38)
c语言·unity·c#·交互·游戏开发·材质·shader
杜子腾dd1 小时前
8.Excel:数据验证和下拉列表
数据分析·excel
chegan1 小时前
用c#从头写一个AI agent,实现企业内部自然语言数据统计分析(三)--一个综合的例子
ai·c#·agent
乐享极致1 小时前
Python 数据可视化进阶:精准插入图表到指定 Excel 工作表
python·信息可视化·excel
全栈小53 小时前
【C#】.net core6.0无法访问到控制器方法,直接404。由于自己的不仔细,出现个低级错误,这让DeepSeek看出来了,是什么错误呢,来瞧瞧
开发语言·c#·.netcore
浅陌sss10 小时前
C#中实现XML解析器
xml·c#
全栈师12 小时前
C#中分组循环的做法
开发语言·c#
FAREWELL0007512 小时前
C#进阶学习(十六)C#中的迭代器
开发语言·学习·c#·迭代器模式·迭代器
DXM052113 小时前
牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例
开发语言·笔记·学习·arcgis·c#·ae·arcgis engine