2010-07-01 59 views
4

有没有比Kill()更好的方法来存档相同的结果。当我杀死()一个Excel进程时,下次打开任何Excel工作表时,将打开“文档恢复”侧栏,这是我不想做的。比Process.Kill更好的选择()

+0

你必须让Excel正常退出,并等待它退出,否则Excel将始终显示文件恢复窗口。 – GenericTypeTea 2010-07-01 10:53:02

+0

您的代码是否首先启动Excel?如果是这样,那么一旦完成,这可能会提供关闭Excel的好方法。 – 2010-07-01 11:07:02

+0

它在Web浏览器组件中打开,并且不允许用户手动更新工作表。 – Rabin 2010-07-01 11:20:40

回答

2

不确定这是否有助于Excel在Web浏览器中运行。如果你能抢的运行,你可以找到你想要关闭该工作簿的Excel实例...

try 
{ 
    // Grab a reference to an open instance of Excel 
    var oExcelApp = 
     (Microsoft.Office.Interop.Excel.Application) 
     Marshal.GetActiveObject("Excel.Application"); 

    // Loop around the workbooks to find the one you want to close 
    for (int i = 1; i <= oExcelApp.Workbooks.Count; i++) 
    { 
     if (oExcelApp.Workbooks[i].Name == "requiredname") 
      oExcelApp.Workbooks[i].Close(Type.Missing, Type.Missing, Type.Missing); 

    } 

    // Clear up... 
    Marshal.FinalReleaseComObject(oExcelApp); 

} 
catch(Exception ex) 
{ 
    // Something went wrong... 
} 
+0

谢谢安迪队友。 – Rabin 2010-07-02 09:46:45

5

添加.Net参考Microsoft.Office.Interop.Excel。那么不妨看看下面的代码我拼凑:

Microsoft.Office.Interop.Excel.ApplicationClass _excel; 
Microsoft.Office.Interop.Excel.Workbook _workBook; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    _excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
    _excel.Visible = true; 

    // Open the workbook 
    _workBook = _excel.Workbooks.Open(@"DataSheet.xls", 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
     Type.Missing, Type.Missing); 

} 

private void btn_Close_Click(object sender, EventArgs e) 
{ 

    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 

    _workBook.Close(false, Type.Missing, Type.Missing); 
    _excel.Quit(); 

    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_workBook); 
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_excel); 

} 
+0

我试过这个,但是下次我打开同一个文件时,它会给出错误。 – Rabin 2010-07-01 10:51:55

+0

@Rabin - 提供一个代码示例。 – GenericTypeTea 2010-07-01 10:52:27

+0

Btw,'Process.Close'是'Process.Dispose'的别名 - 它释放你的进程句柄副本而不是关闭正在运行的进程。 – 2010-07-01 11:06:04

1

由于这是Excel中,怎么样其实说话的Excel,并要求它关闭得好吗?你可以使用COM来做到这一点。

+0

说我想很好地关闭DataSheet.xls。我如何使用COM来做到这一点?任何代码示例? – Rabin 2010-07-01 11:05:29

+0

请参阅@ [GenericTypeTea](http://stackoverflow.com/users/44269/generictypetea)的[answer](http://stackoverflow.com/questions/3157051/better-option-than-process-kill/3157061 #3157061)。 – 2010-07-01 11:31:41