使用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左右,从我的电脑上的运行流畅度来说,还是很不错的。

 未完待续

posted on 2015-08-23 11:46  一路轻歌  阅读(634)  评论(0)    收藏  举报