张扬而不张狂、拼博而不拼命!
忙碌而不盲目、放松但不放纵!

随笔 - 44, 文章 - 56, 评论 - 187, 引用 - 7
数据加载中……

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


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

相关使用手册

ExcelManagerV1.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字符,目前写操作仅支持单工作簿,最大存在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

       2.读取Cell单元格

ReadCell


       3.写入文件

WriteFile


      
4.写入数据至某单元格

WriteCell

 

五、参考:

 

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.读取文件序列图



 
林付国 
2006-5-25

0
0
(请您对文章做出评价)
« 上一篇:win2003的安全,竟如此这般。。。
» 下一篇:ExcelManager--基于.Net的Excel读写管理类库(二)

posted on 2006-08-19 01:27 林子 阅读(9292) 评论(11)  编辑 收藏 网摘 所属分类: DOTNET技术

评论

#1楼   回复  引用  查看    

支持关注中
2006-08-19 16:56 | aspnetx      

#2楼   回复  引用    

强烈支持楼主的开源思想,本人现在虽然没机会做dot NET(公司原因),
但以后也打算做个dot NET管理系统 利用开源这个过程 来 练技术。
2006-08-19 21:20 | taeheelive[未注册用户]

#3楼   回复  引用  查看    

你好,在Web下写Excel时报错,OpenCreate时异常。
IExcelManager iex = null;
string strPa = "";
strPa = @"C:\Temp\a.xls";
try
{
iex = ExcelManagerFactory.Instance().CreateExcelManager();
iex.FilePath = strPa;
iex.DataSource = dsExpert;
iex.WriteType = EnumType.WriteType.None;
iex.SheetName = "Sheet1";
iex.OpenCreate();
// 指定当前读取的工作表,用索引方式(Sheet1—Sheet32)
iex.ActiveSheet(EnumType.SheetIndex.Sheet1);
iex.Write();
// 重写数据
//iex.ReWrite(重写开始行);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if(iex != null)
{
iex.Close();
}
}
代码是按照手册修改的,C:\Temp everyone有写的权限。
由于没有smartExcel的代码,所以看不出来问题所在。
请楼主帮忙看看啊。
谢谢。
2006-08-21 11:24 | 黄 毅      

#4楼[楼主]   回复  引用  查看    

@黄 毅
请查看此文章中下面文字:
“5. 文件创建部分参考博客园灵感之源vb.net SmartExcel及鞠强C#SmartExcel两位朋友的方法,感谢两位朋友所付出的劳动,谢谢!
(个人意见:鉴于此方法使用组件的问题,不建议用此方法) 如有兴趣的朋友可以查看”

关于自动建立Excel文件的问题,我个人意见并不推荐此方法,至于你的代码为何创建不了,我认为权限的可能性很小,应该是文件创建组件的问题吧,你再查看一下,下面是我测试的Web下面的代码,已在vs.net2003下测试创建文件,写入数据成功
DataSet dst = new DataSet();
dst = this.CreateDataSource();

IExcelManager iex = null;
string strPa = @"C:\temp\a.xls";

try
{
iex = ExcelManagerFactory.Instance().CreateExcelManager();
iex.FilePath = strPa;
iex.DataSource = dst;
iex.WriteType = EnumType.WriteType.None;
iex.SheetName = "zzzzzzzzz";
iex.OpenCreate();
// 指定当前读取的工作表,用索引方式(Sheet1—Sheet32)
//iex.ActiveSheet(EnumType.SheetIndex.Sheet1);
iex.Write();
2006-08-21 22:30 | 林子      

#5楼   回复  引用    

不错,不错,虽然现在没有时间仔细看,但楼主真的很用心.支持一下!!!!!!!
2007-06-13 10:09 | tfy882[未注册用户]

#6楼   回复  引用    

准备仔细看看,谢谢楼主了,大好人啊!
2007-10-17 13:57 | yeer[未注册用户]

#7楼   回复  引用    

和Microsoft.Office.Tools.Excel相比谁更好?
2008-04-28 10:08 | xxxxxxxxxxxxxx[未注册用户]

#8楼   回复  引用    

导入的命名空间是什么
还引用类库了吗
2008-06-10 15:46 | kekexin[未注册用户]

#9楼[楼主]   回复  引用  查看    

@xxxxxxxxxxxxxx
是封装在它之上的
2008-07-09 14:13 | 林子      

#10楼[楼主]   回复  引用  查看    

@kekexin
重新封装了Microsoft.Office.Tools.Excel类库
2008-07-09 14:14 | 林子      

#11楼   回复  引用  查看    

挺不错的 顶下
2010-01-13 11:04 | wangyang