• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Excel不会退出C#

c/c++ 来源:dhiraj suvarna 5次浏览

我正在用C#编写这个特定的代码来写入Excel文件。Excel不会退出C#

public partial class WriteExcelForm : Form 
{ 
    public WriteExcelForm() 
    { 
     InitializeComponent(); 
    } 

    private void writeExcelButton_Click(object sender, EventArgs e) 
    { 
     Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
     if (xlApp == null) 
     { 
      MessageBox.Show("Excel is not installed!!!"); 
      return; 
     } 

     Excel.Workbooks xlWorkBooks = xlApp.Workbooks; 
     Excel.Workbook xlWorkBook = xlWorkBooks.Add(Type.Missing); 
     Excel.Worksheet xlWorkSheet = xlWorkBook.ActiveSheet; 
     xlWorkSheet.Name = "sample"; 

     Excel.Range range1 = (Excel.Range)xlWorkSheet.Cells[1, 1]; 
     range1.Value = "dhiraj"; 

     Excel.Range range2 = xlWorkSheet.Range["A2"]; 
     range2.Value = "dhiraj"; 

     xlWorkBook.SaveAs("C:\\output.xlsx"); 

     //Properly closing the excel app 
     GC.Collect(); 
     GC.WaitForPendingFinalizers(); 

     xlWorkBook.Close(false, Type.Missing, Type.Missing); 
     xlApp.Quit(); 

     Marshal.FinalReleaseComObject(range1); 
     Marshal.FinalReleaseComObject(range2); 
     Marshal.FinalReleaseComObject(xlWorkSheet); 
     Marshal.FinalReleaseComObject(xlWorkBook); 
     Marshal.FinalReleaseComObject(xlWorkBooks); 
     Marshal.FinalReleaseComObject(xlApp); 
    } 
} 

如果我运行这段代码,excel.exe不会退出,但会一直挂在后台。

但是,如果我注释掉这一行

 Excel.Range range1 = (Excel.Range)xlWorkSheet.Cells[1, 1]; 
     range1.Value = "dhiraj"; 

的EXCEL.EXE优雅退出。

我在这里错过了什么?

编辑: 我已经解决了我的问题。发表我的发现作为答案。

P.S:不知道我为什么被拒绝投票,在发布这个问题之前,我做了很多研究。


===========解决方案如下:

所以,我继续我的研究问这个问题后,我在这个特殊的链接找到该特定链接 How do I properly clean up Excel interop objects?

现在,它放在一起时三个答案帮了我。

第一个答案是这个特定的一个https://stackoverflow.com/a/158752/2241802 它说避免使用“不要使用COM对象两点”。

第二个答案是这样的一个https://stackoverflow.com/a/159419/2241802 这个答案指的是如何在实践中使用Excel对象,它是遵循这一非常重要的,因为我不会在我的代码工作的唯一开发商。

的第三个答案https://stackoverflow.com/a/1893653/2241802 有关如何垃圾收集器的行为会谈的不同之处释放模式和调试模式。

所以这是我的问题,当我在发布模式下运行粘贴在问题中的代码时,它工作正常,并且excel.exe正常退出。

但是,为了使它在调试模式下工作,我采用了上面的Thrid Answer链接的建议,并创建了一个实现了Excel写入内容的函数。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)