日期:2014-05-20  浏览次数:20983 次

VB.net如何将经常引用的Excel封装Excel.dll?
.net开发经常会操作EXcel,且引用Microsoft   Excel   11.0   Object   Library(Microsoft.Offce.Core),但有时Excel版本太多(97、2000、2003等),请问如何将其封装,解决版本太多的问题?

------解决方案--------------------
这个没有办法很好的解决.

如果只是把Excel的数据做导入导出的,不涉及Excel的各种格式的操作,建议把Excel当做数据库来操作,用Oledb去连接,
如果是对Excel的操作比较复杂并格式控制较多,还真的不能很好的处理Office的多版本问题.
------解决方案--------------------
关注
------解决方案--------------------
,建议把Excel当做数据库来操作,用Oledb去连接
------解决方案--------------------
office2003:
TlbImp Excel.exe可是生成Excel.dll

protected void Button1_Click(object sender, EventArgs e)
{
Excel.Application excel = new Excel.Application();
excel.Application.Workbooks.Add ( true ) ;
excel.Cells[ 1 , 1 ] = "First Row First Column " ;
excel.Cells[ 1 , 2 ] = "First Row Second Column " ;
excel.Cells[ 2 , 1 ] = "Second Row First Column " ;
excel.Cells[2, 2] = "Second Row Second Column ";
excel.Visible = true ;
}

这样写还是启动不了Excel,有人能指点下吗?
------解决方案--------------------
(以下观点只是个人的一点理解)
tblimp程序好像是为COM组件制作interop程序集的。其实interop程序集里面并没有任何的程序实现,只不过是将COM组件和CLR通过一个类似于语句转换的东西进行联系。所以interop程序集是不能单独运行的,仍然需要COM组件。
如果我们在.NET IDE里面直接加入一个COM组件的Refrence的话,其实加入到Project里面的只是这个COM组件的interop程序集而已。如果目标机器上面没有这个COM组件或者这个组件没有注册的话,仍然是无法运行的。
关于Excel多版本的问题,我觉得通过Interop是无法解决的。这就好像我们的.NET程序如何解决1.1、2.0和3.0之间的问题。我们能做的只有:
(1)不在.NET Project里面直接Refrence Excel的COM组件。
(2)使用CreateObject来实例化Excel对象。
(3)所有Excel对象都声明为Object,用晚期绑定实现。
(4)尽量少使用Excel自己提供的方法,特别是一些高级方法,比如Sort。这些方法通常由于Excel版本的提升而有所改变。但是偏重底层的,比如Cell、Range则一般不会有太大改变。
(5)强调客户本程序只适用于某(几)个版本的Excel。不要为此造成自己项目的损失。

一个便捷的开发方法是可以在本地引用好Excel组件,不使用晚期绑定。这样各种方法属性都可以进行类型检查。Release之前将Excel引用去掉,然后变换为Object声明。