【问题标题】:Closing Excel Application Process after Excel window closing in C#在 C# 中关闭 Excel 窗口后关闭 Excel 应用程序进程
【发布时间】:2014-03-04 13:09:20
【问题描述】:

为了报告,我创建了一个 Excel 应用程序,将一些数据导出到它,并使其对用户可见。

public void MyMethod()
{
   Excel.Application excelApp = new Excel.Application();
   object misValue = System.Reflection.Missing.Value;
   Excel.Workbook workBook = excelApp.Workbooks.Add(misValue);
   Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(1);
   Excel.Range range;

   //my export code here..



  //at last excel application is shown for user
  excelApp.Visible = true;
}

当用户单击“关闭”按钮时,会出现一个对话框,其中包含 [“保存”、“不保存”和“取消”]。在任何情况下(保存或不保存),窗口都会关闭,但 EXCEL.EXE 进程就像这个问题中的图片一样:Like this picture ,因为我还没有关闭它。

如何定义用户是否关闭查看的 Excel 窗口?如果是,那么我将退出我创建的那个 excel 应用程序。

编辑:我需要“退出事件”之类的东西。定义用户是否关闭窗口,退出应用程序。

【问题讨论】:

  • 为什么不能使用excellApp.Quit()
  • 我什么时候使用它?如果我将使用它,文件将关闭。我想在用户关闭文件后调用它。

标签: c# excel process export-to-excel excel-interop


【解决方案1】:

您可能正在使用未正确释放的 COM 对象

Worksheets sheets = excelApp.Worksheets;
Worksheet sheet = sheets.Open(...);

Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(sheet);

【讨论】:

  • 确保您正在释放您正在创建的所有 COM 对象。还要确保将它们全部分配给 vars,以便释放它们。
【解决方案2】:

对不起,我误解了这个问题......

旧: 检查窗口是否存在

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
...
while(true)
{
    IntPtr hWnd = (IntPtr)FindWindow(windowName, null);
    public static extern bool IsWindow(IntPtr hWnd);
}
App.Close()

【讨论】:

  • 是 excel 的 windowName "Book1" 吗? (默认窗口标题)或 EXCEL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2019-03-03
  • 1970-01-01
相关资源
最近更新 更多