当前位置: 代码迷 >> Web前端 >> ExcelManager-基于.Net的Excel读写管理类库(1)
  详细解决方案

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

热度:517   发布时间:2012-10-24 14:15:58.0
ExcelManager--基于.Net的Excel读写管理类库(一)

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


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

相关使用手册

ExcelManagerV1.1)手册


修订历史记录

日期

版本

说明

作者

<?XML:NAMESPACE PREFIX = ST1 /><chsdate isrocdate="False" islunardate="False" day="25" month="5" year="2006" w:st="on"><span>2006-5-25</span></chsdate>

1.0

初稿

林付国

<chsdate isrocdate="False" islunardate="False" day="27" month="5" year="2006" w:st="on"><span>2006-5-27</span></chsdate>

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字符,目前写操作仅支持单工作簿,最大存在32Sheet,每Sheet最大存储量为60000

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

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

六、适用范围

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

五、性能测试

?????? 环境:WindowsXPPentium(R)4 CPU 2.8GHZ512MB内存。

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.ExcelManagerlas.foundation.SmartExcel

?????? 1.读取Excel文件

ReadFile
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->?1?DataSet?ds?=?new?DataSet();
?2
?3????????????????????????????IExcelManager?iex?=?null;
?4
?5????????????????????????????try
?6
?7????????????????????????????{?
?8
?9?????????????????????????????????????iex?=?ExcelManagerFactory.Instance().CreateExcelManager();
10
11?????????????????????????????????????iex.FilePath?=需读取文件名;
12
13?????????????????????????????????????if?(Xml架构文件?!=?"")
14
15?????????????????????????????????????{
16
17???????????????????????????????????????????????iex.XMLFilePath?=Xml架构文件;
18
19?????????????????????????????????????}

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

30
31????????????????????????????catch(Exception?ex)
32
33????????????????????????????{
34
35?????????????????????????????????????MessageBox.Show(ex.Message.ToString());
36
37????????????????????????????}

38
39????????????????????????????finally
40
41????????????????????????????{
42
43?????????????????????????????????????if(iex?!=?null)
44
45?????????????????????????????????????{
46
47???????????????????????????????????????????????iex.Close();
48
49?????????????????????????????????????}

50
51????????????????????????????}

52
53

?????? 2.读取Cell单元格

ReadCell
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->?1IExcelManager?iex?=?null;??????????
?2
?3?????????????????????try
?4
?5?????????????????????{?
?6
?7????????????????????????????iex?=?ExcelManagerFactory.Instance().CreateExcelManager();
?8
?9????????????????????????????iex.FilePath?=?读取的文件名;
10
11if?(Xml架构文件?!=?"")
12
13?????????????????????????????????????{
14
15???????????????????????????????????????????????iex.XMLFilePath?=Xml架构文件;
16
17?????????????????????????????????????}

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

28
29?????????????????????catch(Exception?ex)
30
31?????????????????????{
32
33????????????????????????????MessageBox.Show(ex.Message.ToString());
34
35?????????????????????}

36
37?????????????????????finally
38
39?????????????????????{
40
41????????????????????????????if(iex?!=?null)
42
43????????????????????????????{
44
45???????????????????????????????????iex.Close();???
46
47????????????????????????????}

48
49?????????????????????}

50
51


?????? 3.写入文件

WriteFile
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->?1?IExcelManager?iex?=?null;??????????
?2
?3?????????????????????string?strPa?=?"";
?4
?5?????????????????????strPa?=?this.txtFileName.Text;??????????????????????????????????????????????????????????
?6
?7?????????????????????try
?8
?9?????????????????????{
10
11????????????????????????????iex?=?ExcelManagerFactory.Instance().CreateExcelManager();
12
13????????????????????????????iex.FilePath?=?strPa;
14
15????????????????????????????iex.DataSource?=?数据源;
16
17????????????????????????????iex.WriteType?=?EnumType.WriteType.None;
18
19????????????????????????????iex.SheetName?=?设置Sheet名称
20
21????????????????????????????iex.OpenCreate();
22
23?????????????????????????????????????//?指定当前读取的工作表,用索引方式(Sheet1―Sheet32)
24
25?????????????????????????????????????iex.ActiveSheet(EnumType.SheetIndex.Sheet1);
26
27????????????????????????????iex.Write();
28
29????????????????????????????//?重写数据
30
31//iex.ReWrite(重写开始行);
32
33?????????????????????}

34
35?????????????????????catch(Exception?ex)
36
37?????????????????????{
38
39????????????????????????????MessageBox.Show(ex.Message.ToString());
40
41?????????????????????}

42
43?????????????????????finally
44
45?????????????????????{
46
47????????????????????????????if(iex?!=?null)
48
49????????????????????????????{
50
51???????????????????????????????????iex.Close();
52
53????????????????????????????}

54
55?????????????????????}

56
57


??????
4.写入数据至某单元格

WriteCell
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->?1IExcelManager?iex?=?null;??????????
?2
?3?????????????????????string?strPa?=?写入的文件名;
?4
?5?????????????????????try
?6
?7?????????????????????{
?8
?9????????????????????????????iex?=?ExcelManagerFactory.Instance().CreateExcelManager();
10
11????????????????????????????iex.FilePath?=?strPa;
12
13????????????????????????????iex.BackColor?=背景颜色;
14
15????????????????????????????iex.ForeColor?=字体颜色
16
17????????????????????????????iex.Font?=?字体样式;
18
19???????????????????????????iex.OpenCreate();?????????????????????
20
21???????????????????????????????????????????????//?指定当前读取的工作表,用索引方式(Sheet1―Sheet32)
22
23???????????????????????????????????????????????iex.ActiveSheet(EnumType.SheetIndex.Sheet1);??????
24
25????iex.WriteCell(行,列,写入值);
26
27????????????????????????????}

28
29?????????????????????catch(Exception?ex)
30
31?????????????????????{
32
33????????????????????????????MessageBox.Show(ex.Message.ToString());
34
35?????????????????????}

36
37?????????????????????finally
38
39?????????????????????{
40
41????????????????????????????if(iex?!=?null)
42
43????????????????????????????{
44
45???????????????????????????????????iex.Close();???
46
47????????????????????????????}

48
49?????????????????????}

50
51??????????????????????????????????????????????????????????????????????
52

?

五、参考:

?

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 SmartExcel鞠强C#SmartExcel两位朋友的方法,感谢两位朋友所付出的劳动,谢谢!
??????????? (个人意见:鉴于此方法使用组件的问题,不建议用此方法)??如有兴趣的朋友可以查看


版权

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

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

、设计图
1.User Case

2.基本类图

3.写入文件序列图

4.读取文件序列图



  相关解决方案