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中使用...
我试试楼主的看看