Excel不会退出C#

我正在用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写入内容的函数。

回答:

查找下面的代码

protected void Button3_Click(object sender, EventArgs e) 

{

int randomvalue = new Random().Next(10);

try

{

filename = Server.MapPath("~/Reports/Tro_Reports" + randomvalue + ".xlsx");

using (var getReportCollection = new DataSet1())

{

using (var tableCollection = getReportCollection.Tables["SheetNames"])

{

var excelApplication = new Microsoft.Office.Interop.Excel.Application();

try

{

var wb = excelApplication.Workbooks.Add();

var collection = new Microsoft.Office.Interop.Excel.Worksheet[20];

for (var i = 0; i < tableCollection.Columns.Count; i++)

{

collection[i] = wb.Worksheets.Add();

collection[i].Name = tableCollection.Columns[i].ToString();

}

var thisWorksheet = collection[2];

var thisRange = thisWorksheet.Range["A1"];

thisRange.Value = "Event Summary Report";

wb.SaveAs(filename);

wb.Close();

}

finally

{

Marshal.ReleaseComObject(excelApplication);

}

}

}

}

catch (ExternalException ex)

{

}

}

上面的代码片断将正常关闭您的Excel工作表。

以上是 Excel不会退出C# 的全部内容, 来源链接: utcz.com/qa/260017.html

回到顶部