【问题标题】:C# Close Excel Instance opened by another applicationC#关闭另一个应用程序打开的Excel实例
【发布时间】:2021-07-16 20:39:50
【问题描述】:

我想知道是否有其他软件创建 Excel 实例,是否可以从 c# 访问该实例并关闭但不终止进程? 我曾尝试使用Marshal.GetActiveObject("Excel.Application"),但这给我带来了错误:

System.Runtime.InteropServices.COMException: 'Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))'

【问题讨论】:

  • 是在不同的用户下吗?如果是这样,您是否以管理员权限执行?
  • 由其他人开始正常处理你have to kill
  • 同一个用户,没有特殊权限。
  • @sinatr 同意,但这给我带来了一个问题,有时我必须重新启动服务器,因为 excel 开始失败。如果我忘记检查服务器,明天可能无法完成这项工作......
  • 您不是将其作为服务运行,只是普通的 WinForms 或控制台应用程序?这里的两个答案是否有用stackoverflow.com/questions/43664079/…

标签: c# .net


【解决方案1】:

我找到了让它工作的方法。 我用过

using Excel  = Microsoft.Office.Interop.Excel.Application;

稍后在我使用的代码中:

var app = (Excel.Application)Marshal.GetActiveObject("Excel.Application");

这给我带来了一个问题。我将代码更改为:

using Microsoft.Office.Interop.Excel.Application;

var obj = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
obj.Quit();

现在这可以正常工作了。

【讨论】:

  • 所以在第一个示例中您没有调用.Quit(),而在第二个示例中您调用的是.Quit(),并且很惊讶为什么第一个示例没有结束 excel 应用程序?
  • 后来我肯定在第一行出现异常之前添加了.Quit(). var app = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); -> 这行从上面的问题中创建了我的异常......我不是问为什么应用程序没有结束,我问的是如何访问另一个系统生成的已经打开的 Excel 实例。
猜你喜欢
  • 2015-09-07
  • 2013-09-08
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多