解决C#使用Microsoft.Office.Interop.Excel操作Excel后进程一直存在的问题

This resolved the issue for me. Your code becomes:

public Excel.Application excelApp = new Excel.Application();
public Excel.Workbooks workbooks;
public Excel.Workbook excelBook;
workbooks = excelApp.Workbooks;
excelBook = workbooks.Add(@"C:/pape.xltx");

  

...
Excel.Sheets sheets = excelBook.Worksheets;
Excel.Worksheet excelSheet = (Worksheet)(sheets[1]); excelSheet.DisplayRightToLeft = true;
 Range rng;
rng = excelSheet.get_Range("C2");
rng.Value2 = txtName.Text;

And then release all those objects, (Note: All the com object should be release, othewise the excel process won‘t be closed.)

System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
excelBook .Save();
excelBook .Close(true);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

I wrap this in a try {} finally {} to ensure everything gets released even if something goes wrong (what could possibly go wrong?) e.g.

public Excel.Application excelApp = null;
public Excel.Workbooks workbooks = null;
...
try
{
    excelApp = new Excel.Application();
    workbooks = excelApp.Workbooks;
    ...
}
finally
{
    ...
    if (workbooks != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
    excelApp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
}
时间: 2024-11-08 20:30:48

解决C#使用Microsoft.Office.Interop.Excel操作Excel后进程一直存在的问题的相关文章

Microsoft.Office.Interop.Excel 操作 Excel

Microsoft.Office.Interop.Excel类库用于操作Excel,提供了丰富的类和函数,功能非常强大. 第一部分:类库简介 引用命名空间 using Excel = Microsoft.Office.Interop.Excel; 1,在使用类库之前,先总结以下几个类的用法 Application:Excel应用程序类,是Excel的引擎,new 一个实例. Excel.Application excelApp = new Excel.Application(); Workboo

Excel操作 Microsoft.Office.Interop.Excel.dll的使用

先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Excel后发现他的api说明并不多,好在网上有很多朋友贴出了一些代码,我在不断的挫折中吸取了很多教训,现共享出来,给大家参考. 1. 最好在客户端使用,不要在B/S服务端使用,因为会受到IIS权限和占用内存影响,多人并发操作必然完蛋 2. 需要引入两个DLL,Microsoft.Office.Interop.Excel.dll和office.dll,在加上项目的时候,会报错“类型“Microsoft.Off

C#操作Office- Cannot find the interop type that matches the embedded interop type 'Microsoft.Office.Interop.Excel.Application'

网上说 2003 -> 11.0, 2007 -> 12.0. 因为平时提示"Are you missing an assembly reference?",都是没有引用库文件,但是明明我已经添加好引用了,还是报错.机器上安装的是Office2010,但是在库引用中,v14.0的是不行,Office 2010中的 Excel还是用v12.0. 处理题目中的错误,是将库文件中的"Embedded Interop Type"属性设置为false即可.(突然记

c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 [csharp] view plaincopy using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; 3.写入excel 写入函数 [csharp] view plaincopy public void ToExcel(string strTitle) { int nMax = 9; int nMin =

引用Microsoft.Office.Interop.Excel出现的问题

引用Microsoft.Office.Interop.Excel出现的问题 转自:http://www.hccar.com/Content,2008,6,11,75.aspx,作者:方继祥 操作背景:asp.net操作Excel 出现问题:在本地添加引用(com):Microsoft Office 11.0 Object Library,并写好程序调试正常,部署到服务器时,出现异常 Excel.Application不是对象. 初步诊断:服务器没有安装Excel组件 第一步尝试解决:对服务器安装

Microsoft.Office.Interop.Excel 放到B/S客户端失败问题 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问. (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED)). 解决办法:(转) http://blog.csdn.net/wzhibin/article/details/1816690 用.net写了一个相关Excel的B/S的程序,部署到2003企业版的服务器上遇到这个错误:检索 COM

“DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用

“DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用 造成这个错误的原因是,在使用DataTable操作Sql和Excel的时候发生了二义性. 解决办法:把命名空间写全了,如: System.Data.DataTable dt = null; "DataTable"是"System.Data.DataTable"和"Microsoft.

Microsoft.Office.Interop.Excel.ApplicationClass can not embedded 的问题

用c#进行开发时,要做一个excel导入功能,期间使用到Microsoft.Office.Interop.Excel程序集,在用vs2008开发的时候没有报错,将这个程序集引用到vs2010的时候,便报错了:interop type 'Microsoft.Office.Interop.Excel.ApplicationClass' cannot be embedded. 解决方法:点击程序集(DDL),右键-属性,将embed interop types 更改为false. Microsoft.

使用Microsoft.Office.Interop.Excel时,64位问题

前不久,碰到一个问题. 曾经用的好好的Microsoft.Office.Interop.Excel实现的导出Excel,迁移至64位server后,就出现: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败 查询了下网上大家的解决的方法.差点儿千篇一律都是例如以下的解决方案: 在64位机器安装office后,做例如以下设置. 1:在"開始"->"执行"中输入dcomcnfg.ex