C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程(公司实战项目经验)
来源:互联网 发布:政务和公益机构域名注册管理中心 编辑:程序博客网 时间:2024/05/22 05:03
<SCRIPT type=text/javascript><!--google_ad_client = "pub-4382955739270299";/* 468x15, 创建于 08-9-5 */google_ad_slot = "2818501739";google_ad_width = 468;google_ad_height = 15;//--></SCRIPT><SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript></SCRIPT>
昨天客户要求,要从Excel里面往程序里导入数据,郁闷,从来没摸过Excel导入这方面的东西,于是Google了一下,大约过了半个小时发现了两个方法,一个时用Excel 的.Net Com组件去访问,一个时用.Net ADO去访问,考虑了一下,准备用Com去解析算了。首先用程序里面要添加一个引用,Microsoft Office InterOp Excel ,添加完后,就可以引入Excel这个空间
using Excel = Microsoft.Office.Interop.Excel ,但调用完毕后 ,Excel进程无法彻底关闭。你会发现虽然调用了m_xlsApp.Quit();这个退出方法,但进程里面还是会留下一个Excel.exe进程,而且刚解析的Excel文件,也被占用着,没办法马上就释放,所以,我删除Excel文件的时候也出现了问题,再解析完这个Excel文件后,我会马上删除这个Excel文件,但时Excel.exe程序没办法马上释放,所以会报异常,文件被占用。在网上查看了一下,终止进程的方法找到了,用垃圾回收这个方法,System.GC这个东东,强行回收掉,但不能Kill掉,因为可能会滥杀无辜,如果两个用户同时导入的话,一个用户先导入完毕,杀进程,另一个用户就会导入失败,而删除文件,就郁闷了,我调试的时候,删除文件就没问题,我把断点去掉,删除文件就问题,我发现可能时释放文件的时间问题,于是,在删除文件的时候,我让当前线程阻塞了0.5秒,OK,删除没报错 问题解决了,哈哈,真爽~~~
这是部分代码
- Excel.Application m_xlsApp = null;
- Excel.Workbook m_Workbook = null;
- Excel.Worksheet m_Worksheet = null;
- try
- {
- object objOpt = System.Reflection.Missing.Value;
- m_xlsApp = new Excel.Application();
- m_Workbook = m_xlsApp.Workbooks.Open(s_FileName, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt);
- m_Worksheet = (Excel.Worksheet)m_Workbook.Worksheets.get_Item(sheetIndex);
- DataRow newRow;
- for (int j = 2; j <= m_Worksheet.UsedRange.Rows.Count; j++)
- {
- newRow = dtTemp.NewRow();
- for (int i = 1; i <= m_Worksheet.UsedRange.Columns.Count; i++)
- {
- if (((Excel.Range)(m_Worksheet.Cells[j, i])) != null && ((Excel.Range)(m_Worksheet.Cells[j, i])).Text.ToString() != "")
- {
- newRow[i - 1] = ((Excel.Range)(m_Worksheet.Cells[j, i])).Value2.ToString();
- }
- }
- dtTemp.Rows.Add(newRow);
- }
- }
- catch (Exception exc)
- {
- Alert("导入失败~!");
- }
- finally
- {
- m_Worksheet = null;
- m_Workbook = null;
- m_xlsApp.Quit();
- int generation = System.GC.GetGeneration(m_xlsApp);
- m_xlsApp = null;
- System.GC.Collect(generation);
- }
- return dtTemp;
<SCRIPT type=text/javascript><!--google_ad_client = "pub-4382955739270299";/* 468x15, 创建于 08-9-5 */google_ad_slot = "2818501739";google_ad_width = 468;google_ad_height = 15;//--></SCRIPT><SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript></SCRIPT>
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程(公司实战项目经验)
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程
- C#彻底关闭Excel进程excel.exe
- 用完Excel组件后 如何彻底关闭Excel进程
- C# 关闭EXCEL进程
- C# Excel进程关闭
- C# 关闭 Excel进程
- c# 关闭excel进程
- C# COM组件操作Excel
- C#关闭excel进程方法
- C#调用COM组件后退出Excel进程
- .Net程序中如何彻底关闭Excel - 关闭进程外COM方法
- 用完Excel组建后如何彻底删除Excel进程
- 基于COM组件方式读取Excel文件内容(C#版)
- 彻底结束EXCEL进程
- (转) 关闭excel进程
- C#彻底释放EXCEL
- 简单的ftp 自动上传脚本
- 断言概述
- VS文件自动格式化
- 让Yahoo开通POP3和SMTP
- css编译成swf
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程(公司实战项目经验)
- CodeBlocks开发wxWidgets环境配置详细
- 单片机中断
- 修改struts2 显示的后缀 .action 为 .jsp
- 需求分析 之前该知道的几个问题
- 开始忙起来吧...
- 改变进程的优先级
- 需求分析之一
- jacob的使用方法总结