使用C#语言读取EXCEL的多种方法
博文动机:
1.整合网上EXCEL的读取方法;
2.对各种方法的不足进行讨论;
3.对各种方法的效率进行测试;
4.加强C#语法的练习(其实我是个C#菜鸟)
运行环境:WINDOW 7,MS Office 2003
开发环境:VS2012
软件名称:LoadExcel.exe
软件概览:

导入源描述:
//Data Desc : 8 rows × 2001 colomn,16008 cells in total. //File path : D:\LoadResource.xls //Data Format: //Name sex tool font fvourite fruit favourite star papy mammy //Name1 Type1 Tool1 Font1 Favourite Fruit1 Favourite Star1 papy1 Mammy1 //Name2 Type2 Tool2 Font2 Favourite Fruit2 Favourite Star2 papy2 Mammy2 //Name3 Type3 Tool3 Font3 Favourite Fruit3 Favourite Star3 papy3 Mammy3 //...
首先列出一些工具性质的代码加入工程:
//实现精确定时,引用WIN32 API(其实也没有那么精确,但是毫秒级也是够用了) [DllImport("kernel32")] static extern uint GetTickCount();
一、NPOI的EXCEL数据导入
为了布置好编码的前提,你需要前往[http://npoi.codeplex.com/]下载需要的第三方库NPOI,并引用其入工程,本次测试将采用版本dotnet2:
a.创建对象,获取行列号
1 //使用文件名初始化工作本对象 2 HSSFWorkbook workBook = new HSSFWorkbook(new FileStream(@"D:\loadResource.xls", FileMode.Open)); 3 //获取工作本下的第一个数据表 4 HSSFSheet sheet = (HSSFSheet)workBook.GetSheet("sheet1"); 5 int rowsCount = sheet.PhysicalNumberOfRows; // 行数 6 int colsCount = sheet.GetRow(0).PhysicalNumberOfCells; // 列数
2.逐行逐列读取单元格数据,并且显示出来
1 DataTable targetTable = new DataTable("TABLE_TEST"); //将被绑定的数据表 2 3 HSSFRow rowTitle = (sheet.GetRow(0) as HSSFRow); 4 5 //读取位于首行的列名 6 for (int i = 0; i < colsCount; i++) 7 { 8 HSSFCell cell = rowTitle.GetCell(i) as HSSFCell; 9 targetTable.Columns.Add(cell.ToString(),cell.GetType()); 10 } 11 12 //逐行读取数据 13 for (int i = 1; i < rowsCount; i++) 14 { 15 HSSFRow excelRow = (sheet.GetRow(i) as HSSFRow); 16 DataRow tableRow = targetTable.NewRow(); 17 for (int j = 0; j < colsCount; j++) 18 { 19 tableRow[j] = excelRow.GetCell(j); 20 } 21 targetTable.Rows.Add(tableRow); 22 } 23 24 //将数据表绑定到控件 25 gridImportView.DataSource = targetTable;
c.开始单次测试:
我的PC配置中上为E3-1231 V3的CPU,内存为8G,
结果发现,除了第一次数据耗费总时间为200ms外,其他数次都在50ms左右。

1.在测试过程中,我将屏蔽掉所有所有的界面显示代码,并增大数据源的行数来进行多次测试。
测试a:10000行 5次测试数据:
总耗时 平均耗时
327 0.0327
390 0.039
297 0.0297
343 0.0343
328 0.0328
测试b: 5000行 5次测试数据:
总耗时 平均耗时
156 0.0311
187 0.0370
156 0.0311
141 0.0281
156 0.0311
测试c: 3000行 5次测试数据:
总耗时 平均耗时
93 0.0310
125 0.0416
94 0.0313
78 0.026
141 0.047
测试结果:每行读取效率约为0.03ms左右,从我的电脑上的运行流畅度来说,还是很不错的。
未完待续
浙公网安备 33010602011771号