转: ASP.Net call Excel
来源:互联网 发布:nginx 锁定域名 编辑:程序博客网 时间:2024/06/07 16:40
转自:http://www.cnblogs.com/xuanhun/archive/2010/04/29/1724500.html
。。。
四. "未将对象引用设置到对象实例"和服务器端部署
客户端一切运行正常,接下来就是要把DLL部署到服务器上。可是服务器根本没用安装Office,在网站找了很久,也没找到此种方法的解决方案。无奈就安装了Office,本来以为万事大吉,但是每次都提示"未将对象引用设置到对象实例"。采用抛异常的方法才知道示例程序中的几个主要字段都为空,那就是本地的COM根本没调用成功。找到http://www.cnblogs.com/Mainz/archive/2009/11/11/microsoft_office_interop_excel.html文章,于是乎又进行了如下操作。
从服务器上把EXCEL.EXE拷到了本机上,然后从VS2010的命令行启动TlbImp,执行命令:TlbImp /out:Interop.Excel.dll Excel.exe。生成Interop.Excel.dll。
在项目中去除了Microsoft.Office.Interop.Excel.dll的引用,添加Interop.Excel.dll,将顶部的using Excel=Microsoft.Office.Interop.Excel,该为using Excel= Interop.Excel,本地运行程序没有问题。再次更新服务器端程序,结果又出了新的异常:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80080005。
五. "80080005异常"与权限配置
"80080005异常"是应用程序对COM组件操作权限不足引起的。于是有了下面的操作:
1)控制面板->管理工具->组件服务->计算机->我的电脑->DCOM-> Microsoft Excel 应用程序
2)单击属性打开此应用程序的属性对话框。
3) 单击标识选项卡,然后选择交互式用户。
4) 单击默认安全性选项卡。设置当前服务器与ASP.NET相关的用户的访问权限。
5)单击启动权限的编辑默认值。设置ASP.NET相关的用户的访问权限。
至此,程序才运行成功,可谓一波三折。
六.关闭Excel进程
如果使用这种方式用户每导出一个Excel文件,服务器端就会启动一个Excel进程。这回引起两个问题,一是耗费服务器资源,二是当进程数达到上限时,会引发异常,调用COM失败。这个时候要想办法结束Excel进程。我采用了杀进程的方式,类似下面的做法:
private void DoExcel()
{
Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application();
//这里释放所有引用的资源
application.Quit();
KillExcel(application);
}
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);
public static void KillExcel(Microsoft.Office.Interop.Excel.Application excel)
{
IntPtr t = new IntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
int k = 0;
GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
p.Kill(); //关闭进程k
}
七.还有其他选择
生成Excel方式不止一种,比如利用OpenXml,还是留给你们导论吧,我向你们学习。
- 转: ASP.Net call Excel
- ASP.net转Excel
- ASP.net转Excel
- [Asp.net学习]asp.net操作Excel文章总结(转)
- Asp.net页面输出到EXCEL (转)
- 转: asp.net Excel Import / Export
- ASP.NET 利用MD.DLL 转EXCEL
- asp.net页面DataTable转Excel
- asp.net与Excel
- asp.net输出Excel
- ASP.NET读取EXCEL
- ASP.NET读取EXCEL
- asp.net导出excel
- asp.net导出Excel
- asp.net 操作EXCEL
- asp.net导出excel
- asp.net 操作Excel
- asp.net to excel
- java迭代其
- web2.0中div常用的配色
- 转:javascript实现导出excel
- android permission
- 对于学习的一点感想
- 转: ASP.Net call Excel
- 可执行jar包的MANIFEST.MF
- 转:使用Office组件读取Excel,引用Microsoft.Office.Interop.Excel出现的问题
- 关于Spring的OpenSessionInViewFilter
- 转: asp.net Excel Import / Export
- 第一次哦
- C++学习杂记
- MyEclipse快捷键大全(绝对全)
- NOSQL-Cassandra