C# 操作 Excel,调用Excel后关闭进程

beifang1986 2009-06-08 07:19:18
以下代码会将自己以前打开的Excel也关闭掉,有没有获得调用时所打开的Excel ,再进行关闭???

private void KillProcess()
{
System.Diagnostics.Process myproc= new System.Diagnostics.Process();

try
{
foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcessesByName("excel"))
{
if(!thisproc.CloseMainWindow())
{
thisproc.Kill();
}
}
}
catch(Exception Exc)
{
}
}
...全文
214 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
doudou32 2010-03-12
  • 打赏
  • 举报
回复
但是我走到最后时,会报错,说不能从RCW中提取对象COM,请教怎么解决?
finally
{
excelApplication.Workbooks.Close();
excelApplication.Quit();
}
carl2500 2009-06-08
  • 打赏
  • 举报
回复
这个问题其实我也找了很久,最后找到方法了


namespace ConsoleApplication
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;

internal class Program
{
internal static void Main(string[] args)
{
try
{
ExcelOperation(args[0]);
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}

private static void ExcelOperation(string filename)
{
// 这里使用Excel对象
Excel.Application excelApplication = new Excel.Application();
object missing = System.Reflection.Missing.Value;

try
{
excelApplication.Workbooks.Open(
filename,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing,
missing);

// 一些操作
}
finally
{
excelApplication.Workbooks.Close();
excelApplication.Quit();
}
}
}
}


这个是示例,根据你自己的需要修改

如果Excel.Application作为成员,那么可以在终结器里写如下代码

excelApplication = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();


或者实现IDisposable.Dispose()
beifang1986 2009-06-08
  • 打赏
  • 举报
回复
上面漏掉了一句:

调用 :

KillProcess();

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧