http://blog.csdn.net/mengKzhaoyun/archive/2010/05/06/5564013.aspx
由于要输出页面信息到Excel中,Silverlight的API暂时无法提供让客户直接访问Excel,因此采用强大的WebService来输出 Excel。Mengk遨游网络后发现.Net操作(读\写)Excel存在四种方法如下:
A.使用第三方控件
这里第三方控件有收费的、免费的,经过广大程序员的努力,现在已经有令人满意的免费控件了。
B.调用官方的COM组件
官方的COM组件功能是非常强大的,可以打造精美的Excel。但是也存在一些缺点:
B1.进程独占:操作一个Excel文件需要打开一个进程.
B2.难以正常释放:新手使用这种方法操作Excel应该会碰到这个问题,excelApp.Quit()后进程中仍然存在Excel.exe,这个问题极其严重。
C.使用OLEDB
把Excel当做一个数据库,那么我们可以执行Select、Update、Insert操作(注意:不能执行Delete),在写入的时候完全可以事先制定一个精美的模板再来操作以补偿其功能上的不足之处。
D.使用Asp.Net
这个简单使用DataGrid的RenderControl(HtmlTextWrite write),可以输出一个只有表格其他空白的Excel,这个Excel本质上只是一个特殊的Html文件把后缀改成Excel的后缀然后再Excel中显示,需要另存才能转化成真正的Excel。
新手操作容易出现乱码,这个解决方案是注意编码,不仅仅是代码中的还要注意全局的WebConfig中的配置。
简单对比
方法
占用内存
速度
并发忍耐力
美观
A
一般
二流
B
美-
B
非常
下流
C
美++
C
一般
三流
A
美
D
一般
一流
S
美--
Mengk个人只使用过B、D两种方法,有人说对于方法B可以启动一唯一实例COM进程,把请求交给COM进程来处理这样可以解决启动COM慢的速度问题对于并发也能很好的应付。个人觉得这样进程的安全性考虑起来极其复杂,高手可以试试。
Mengk遇到过的问题:
1. 使用COM组件时,调用Quit方法,令excelApp = null,仍然无法释放进程Excel.exe。
产生这种现象是程序中未能释放所有引用的所有COM对象,一般来说是没有对异常进行处理,在这里要注意的是WorkBook.Save之前要Refresh一下以便及时保存更新的内容,然后是检查所有有改动但是未保存的WorkBook将之一一保存,最后调用System.Runtime.InteropServices.Marshal.ReleaseComObject()方法释放Range、Sheet、Book、App等对象。
2. Excel输出到客户端产生乱码。
注意程序里和WebConfig配置保持一致。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mengKzhaoyun/archive/2010/05/06/5564013.aspx