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