aardio调用ExcelDataReader.dll来快速读取excel文件
前面讲过npoi和其他的几个excel操作库, 这些程序集操作速度最快的应该是npoi了, 但是有时候需要读取几十万行列的超大数据就有些力不从心了.
网上很多人推荐用ExcelDataReader来读取excel , 轻量, 大数据文件速度更快.
这里进行简单的测试, 由于没有特别大的文件, 就没测试大数据, 有这方面需求的可以自己测试下, 欢迎测试后留言反馈下.
ExcelDataReader开源地址:
https://github.com/ExcelDataReader/ExcelDataReader
Lightweight and fast library written in C# for reading Microsoft Excel files
在vs中可以在包管理器里面直接 搜索它的名字直接安装依赖库.

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
custom={cls="custom";text="自定义控件";left=0;top=0;right=760;bottom=470;bgcolor=12639424;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
import dotNet;
import System.Windows.Forms;
var Forms = System.Windows.Forms;
var dataGridView = Forms.CreateEmbed("DataGridView",winform.custom);
dataGridView.ColumnHeadersHeightSizeMode = 2; //避免在高分屏下错乱
dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; //整行选择
//dataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;//列填充
//声明接口
var Readerdll = dotNet.load("\ExcelDataReader.dll");
var ExcelDataReader = Readerdll.import("ExcelDataReader");
//声明接口
var ReaderDataSetdll = dotNet.load("\ExcelDataReader.DataSet.dll");
var ExcelDataReaderExtensions = ReaderDataSetdll.import("ExcelDataReader.ExcelDataReaderExtensions");
//文件流
import System.IO;
var stream = System.IO.File.OpenRead("C:\Users\Desktop\PivotTables.xlsx");
//操作文件
var reader = ExcelDataReader.ExcelReaderFactory.CreateReader(stream);
//转换为dataset
var result = ExcelDataReaderExtensions.AsDataSet(reader);
//关闭文件占用
stream.Close();
//显示数据
dataGridView.DataSource = result.Tables[1];
//最后一列填充满剩余宽度
dataGridView.Columns[dataGridView.ColumnCount].AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
winform.show();
win.loopMessage();如果不同的sheet可以用下面两种方式访问:
方式1: 直接用序号访问
//显示数据 dataGridView.DataSource = result.Tables[1];//2 3 4 ...
方式2: 用sheet名字访问
//显示数据 dataGridView.DataSource = result.Tables.Item["Sheet1"];
完!
上面和调用其他c#程序集不同地方是:
在vs中当你
using ExcelDataReader;
之后就可以添加ExcelDataReader的名字空间了, 这样它的扩展库ExcelDataReader.DataSet.dll 就也直接被集成到这个名字空间了, 所以可以直接使用
var result = reader.AsDataSet(); this.dataGridView1.DataSource = result.Tables[0];
进行转换为dataset格式.
但是在aardio中, 名字空间是隔离的, 所以这里就需要使用另外的方式来实现这个扩展功能. 相当于在vs中使用
var result = ExcelDataReader.ExcelDataReaderExtensions.AsDataSet(reader);
来实现.
工程文件下载:
虚似机里测试了一下5W条数据
先放结果

10W条

测试代码
var tim = time.tick();
import System.Windows.Forms;
var Forms = System.Windows.Forms;
var dataGridView = Forms.CreateEmbed("DataGridView", winform.custom);
dataGridView.ColumnHeadersHeightSizeMode = 2; //避免在高分屏下错乱
import System.Type;
import System.Data;
var dataTable = System.Data.DataTable("DT");
//添加数据
var dll = dotNet.load("res\Aspose.Cells.dll"); //
var workbook = dll.new("Aspose.Cells.Workbook", "res\示例数据.xlsx");
var cells = workbook.Worksheets[1].Cells;
var dataTable1 = cells.ExportDataTable(1, 0, cells.MaxDataRow, cells.MaxColumn + 1); //noneTitle
var dataTable2 = cells.ExportDataTable(0, 0, cells.MaxDataRow + 1, cells.MaxColumn + 1, true); //showTitle
//显示数据
var dataView = System.Data.DataView(dataTable1);
dataGridView.DataSource = dataView;
dataGridView.EditMode = 2;
console.log("使用aspose花费时间:", (time.tick() - tim) / 1000)
使用aspose.Cells的好处是直接,在vs生成dll,直接调用,几条命令就将数据吐到datatable,不好的地方是它收费.(我个人有偏见,收费也没有什么不好)
不过不影响使用...
登录后方可回帖
这段时间试了miniExcel,苦于不知道怎么把C#中的array转成aardio中使用...
我试试楼主的看看