热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ExcelManager基于.Net的Excel读写管理类库(一)

ExcelManager--基于.Net的Excel读写管理类库(一)这是前段时间写Excel读写类,近段时间逛到些技术论坛看好多朋友也在做这方面的内容


ExcelManager--基于.Net的Excel读写管理类库(一)



这是前段时间写Excel读写类,近段时间逛到些技术论坛看好多朋友也在做这方面的内容,于是决定把自己做的开源出来,供大学交流使用,好的地方尽可使用,不足之处,也欢迎拍砖。(注:此管理类库已经通过vs.net2003下测试)

相关使用手册

ExcelManager(V1.1)手册

修订历史记录

日期

版本

说明

作者

2006-5-25

1.0

初稿

林付国

2006-5-27

1.1

增加约束及注意事项

林付国

 

 

 

 

 

 

 

 

目录

一、目标... 2

二、功能... 2

三、约束... 2

四、注意事项... 2

六、适用范围... 3

五、性能测试... 3

六、使用方法... 3

七、版权... 6

一、目标

ExcelManager的目标,便是设计一个基于.Net的通用的Excel读写管理类库,以简化基于.Net平台的Excel应用开发。

二、功能

       目前,ExcelManager主要关注以下几个方面:

1.      文件读取

2.      文件某单元格读取

3.      文件写入

4.      包括样式的某单元格写入

三、约束

1.      执行导出机器上需要装有Office组件,且Excel文件版本在2000以上

2.      读取Excel文件,在第一行必须依次存储二个范围,用于限定参数状态位,依次为:需要读取的起始单元格名称,结束单元格名称

3.      需读取的每个Excel数据文件,必须有于之配对的同名XML架构文件(扩展项可支持不同文件名,不推荐此项)

4.      写文件时,推荐先建立空Excel文件(扩展项可支持自动创建Excel文件,不推荐此项)

5.      当前版本主要实现大数据量的读写操作,对逐Cell读写及Cell格式设置方面暂不涉及

6.      其它约束按照.Net框架及Microsoft Office Excel相关约定。

四、注意事项

1.        Excel读文件目前仅支持单工作簿,单工作表读取

2.        使用读写功能时需要指定当前操作Sheet表(默认为Sheet1),请使用索引枚举EnumType.SheetIndex方式

3.        写Excel文件,提供(普通,ReWrite重写,Append追加)三种操作方式;普通方式为正常情况下对新文件写入,重写是对原数据进行覆盖性重写,追加则是在指定Sheet之后追加数据,若进行大数据量写入操作,请用此项。 “重写”和“追加”操作中,若写入时超过当前Sheet最大容量则自动创建Sheet表继续写入

4.        写入数据量的大小要求单次写入:60000行以内,255列以内,Cell值长度1-255字符,目前写操作仅支持单工作簿,最大存在32个Sheet,每Sheet最大存储量为60000行

5.        写入数据时,若不对Sheet重命名,请设置SheetName属性为空值,按照Excel约定SheetName的名称不能超过32字符

6.        本版本暂不提供数据插入功能

六、适用范围

       此操作类库适用与.NET平台下的Windows应用程序及Web应用程序

五、性能测试

       环境:WindowsXP、Pentium(R)4 CPU 2.8GHZ、512MB内存。

Excel单文件追加测试结果:

数据量           时间

5W               7S

15W              26S

25W              41S

40W              59S

50W              1:24S

60W              1:39S

60W              1:52S

100W            3:27S

六、使用方法

引用 las.foundation.Interfaces,las.foundation.ExcelManager,las.foundation.SmartExcel

       1.读取Excel文件

ContractedBlock.gifExpandedBlockStart.gifReadFile
 1None.gif DataSet ds = new DataSet();
 2None.gif
 3None.gif                            IExcelManager iex = null;
 4None.gif
 5None.gif                            try
 6None.gif
 7ExpandedBlockStart.gifContractedBlock.gif                            dot.gif
 8InBlock.gif
 9InBlock.gif                                     iex = ExcelManagerFactory.Instance().CreateExcelManager();
10InBlock.gif
11InBlock.gif                                     iex.FilePath =需读取文件名;
12InBlock.gif
13InBlock.gif                                     if (Xml架构文件 != "")
14InBlock.gif
15ExpandedSubBlockStart.gifContractedSubBlock.gif                                     dot.gif{
16InBlock.gif
17InBlock.gif                                               iex.XMLFilePath =Xml架构文件;
18InBlock.gif
19ExpandedSubBlockEnd.gif                                     }

20InBlock.gif
21InBlock.gif                                     iex.Open();
22InBlock.gif
23InBlock.gif                                     // 指定当前读取的工作表,用索引方式(Sheet1—Sheet32)
24InBlock.gif
25InBlock.gif                                     iex.ActiveSheet(EnumType.SheetIndex.Sheet1);
26InBlock.gif
27InBlock.gif                                     ds = iex.Read();
28InBlock.gif
29ExpandedBlockEnd.gif                            }

30None.gif
31None.gif                            catch(Exception ex)
32None.gif
33ExpandedBlockStart.gifContractedBlock.gif                            dot.gif{
34InBlock.gif
35InBlock.gif                                     MessageBox.Show(ex.Message.ToString());
36InBlock.gif
37ExpandedBlockEnd.gif                            }

38None.gif
39None.gif                            finally
40None.gif
41ExpandedBlockStart.gifContractedBlock.gif                            dot.gif{
42InBlock.gif
43InBlock.gif                                     if(iex != null)
44InBlock.gif
45ExpandedSubBlockStart.gifContractedSubBlock.gif                                     dot.gif{
46InBlock.gif
47InBlock.gif                                               iex.Close();
48InBlock.gif
49ExpandedSubBlockEnd.gif                                     }

50InBlock.gif
51ExpandedBlockEnd.gif                            }

52None.gif
53None.gif

       2.读取Cell单元格

ContractedBlock.gifExpandedBlockStart.gifReadCell
 1None.gifIExcelManager iex = null;          
 2None.gif
 3None.gif                     try
 4None.gif
 5ExpandedBlockStart.gifContractedBlock.gif                     dot.gif
 6InBlock.gif
 7InBlock.gif                            iex = ExcelManagerFactory.Instance().CreateExcelManager();
 8InBlock.gif
 9InBlock.gif                            iex.FilePath = 读取的文件名;
10InBlock.gif
11InBlock.gifif (Xml架构文件 != "")
12InBlock.gif
13ExpandedSubBlockStart.gifContractedSubBlock.gif                                     dot.gif{
14InBlock.gif
15InBlock.gif                                               iex.XMLFilePath =Xml架构文件;
16InBlock.gif
17ExpandedSubBlockEnd.gif                                     }

18InBlock.gif
19InBlock.gif                            iex.Open();
20InBlock.gif
21InBlock.gif                                     // 指定当前读取的工作表,用索引方式(Sheet1—Sheet32)
22InBlock.gif
23InBlock.gif                                     iex.ActiveSheet(EnumType.SheetIndex.Sheet1);
24InBlock.gif
25InBlock.gif                            strRet = iex.ReadCell(单元格名称);
26InBlock.gif
27ExpandedBlockEnd.gif                     }

28None.gif
29None.gif                     catch(Exception ex)
30None.gif
31ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
32InBlock.gif
33InBlock.gif                            MessageBox.Show(ex.Message.ToString());
34InBlock.gif
35ExpandedBlockEnd.gif                     }

36None.gif
37None.gif                     finally
38None.gif
39ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
40InBlock.gif
41InBlock.gif                            if(iex != null)
42InBlock.gif
43ExpandedSubBlockStart.gifContractedSubBlock.gif                            dot.gif{
44InBlock.gif
45InBlock.gif                                   iex.Close();   
46InBlock.gif
47ExpandedSubBlockEnd.gif                            }

48InBlock.gif
49ExpandedBlockEnd.gif                     }

50None.gif
51None.gif


       3.写入文件

ContractedBlock.gifExpandedBlockStart.gifWriteFile
 1None.gif IExcelManager iex = null;          
 2None.gif
 3None.gif                     string strPa = "";
 4None.gif
 5None.gif                     strPa = this.txtFileName.Text;                                                          
 6None.gif
 7None.gif                     try
 8None.gif
 9ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
10InBlock.gif
11InBlock.gif                            iex = ExcelManagerFactory.Instance().CreateExcelManager();
12InBlock.gif
13InBlock.gif                            iex.FilePath = strPa;
14InBlock.gif
15InBlock.gif                            iex.DataSource = 数据源;
16InBlock.gif
17InBlock.gif                            iex.WriteType = EnumType.WriteType.None;
18InBlock.gif
19InBlock.gif                            iex.SheetName = 设置Sheet名称
20InBlock.gif
21InBlock.gif                            iex.OpenCreate();
22InBlock.gif
23InBlock.gif                                     // 指定当前读取的工作表,用索引方式(Sheet1—Sheet32)
24InBlock.gif
25InBlock.gif                                     iex.ActiveSheet(EnumType.SheetIndex.Sheet1);
26InBlock.gif
27InBlock.gif                            iex.Write();
28InBlock.gif
29InBlock.gif                            // 重写数据
30InBlock.gif
31InBlock.gif//iex.ReWrite(重写开始行);
32InBlock.gif
33ExpandedBlockEnd.gif                     }

34None.gif
35None.gif                     catch(Exception ex)
36None.gif
37ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
38InBlock.gif
39InBlock.gif                            MessageBox.Show(ex.Message.ToString());
40InBlock.gif
41ExpandedBlockEnd.gif                     }

42None.gif
43None.gif                     finally
44None.gif
45ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
46InBlock.gif
47InBlock.gif                            if(iex != null)
48InBlock.gif
49ExpandedSubBlockStart.gifContractedSubBlock.gif                            dot.gif{
50InBlock.gif
51InBlock.gif                                   iex.Close();
52InBlock.gif
53ExpandedSubBlockEnd.gif                            }

54InBlock.gif
55ExpandedBlockEnd.gif                     }

56None.gif
57None.gif


       4.写入数据至某单元格

ContractedBlock.gifExpandedBlockStart.gifWriteCell
 1None.gifIExcelManager iex = null;          
 2None.gif
 3None.gif                     string strPa = 写入的文件名;
 4None.gif
 5None.gif                     try
 6None.gif
 7ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
 8InBlock.gif
 9InBlock.gif                            iex = ExcelManagerFactory.Instance().CreateExcelManager();
10InBlock.gif
11InBlock.gif                            iex.FilePath = strPa;
12InBlock.gif
13InBlock.gif                            iex.BackColor =背景颜色;
14InBlock.gif
15InBlock.gif                            iex.ForeColor =字体颜色
16InBlock.gif
17InBlock.gif                            iex.Font = 字体样式;
18InBlock.gif
19InBlock.gif                           iex.OpenCreate();                     
20InBlock.gif
21InBlock.gif                                               // 指定当前读取的工作表,用索引方式(Sheet1—Sheet32)
22InBlock.gif
23InBlock.gif                                               iex.ActiveSheet(EnumType.SheetIndex.Sheet1);      
24InBlock.gif
25InBlock.gif    iex.WriteCell(行,列,写入值);
26InBlock.gif
27ExpandedBlockEnd.gif                            }

28None.gif
29None.gif                     catch(Exception ex)
30None.gif
31ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
32InBlock.gif
33InBlock.gif                            MessageBox.Show(ex.Message.ToString());
34InBlock.gif
35ExpandedBlockEnd.gif                     }

36None.gif
37None.gif                     finally
38None.gif
39ExpandedBlockStart.gifContractedBlock.gif                     dot.gif{
40InBlock.gif
41InBlock.gif                            if(iex != null)
42InBlock.gif
43ExpandedSubBlockStart.gifContractedSubBlock.gif                            dot.gif{
44InBlock.gif
45InBlock.gif                                   iex.Close();   
46InBlock.gif
47ExpandedSubBlockEnd.gif                            }

48InBlock.gif
49ExpandedBlockEnd.gif                     }

50None.gif
51None.gif                                                                      
52None.gif

 

五、参考:

 

1.        .NET操作Excel COM对象

2.        Microsoft MSDN

3.        http://support.microsoft.com/default.aspx?scid=kb;zh-cn;306023

4.        http://support.microsoft.com/kb/283667/zh-cn

5.        文件创建部分参考博客园灵感之源vb.net SmartExcelC#SmartExcel两位朋友的方法,感谢两位朋友所付出的劳动,谢谢!
            (个人意见:鉴于此方法使用组件的问题,不建议用此方法)  如有兴趣的朋友可以查看


、版权

ExcelManager的技术,思想都来自于网络,鉴于人人为我,我为人人,基于网络,服务于网络的原则,大家可以自由借鉴其中好的部分。当然由于各种原因,此版本仅到1.1版本,其中内部还有很多地方存在不足,需要完善,有时间我会继续完善,有机会参考java中的javaExcelAPI的进行更好的实现。

如果你有更好的想法,请不吝赐教,其它相关服务可以与我联系(MSN:linfuguo@hotmail.com)。

、设计图
1.User Case

2.基本类图

3.写入文件序列图

4.读取文件序列图





推荐阅读
author-avatar
叶小倩2502905191
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有