我正在用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:不知道我为什么被拒绝投票,在发布这个问题之前,我做了很多研究。
@ YowE3K:你是说没有明确的类型转换?我曾尝试过,但最终得到的结果相同。 –
检查此链接:http://www.siddharthrout.com/2012/08/06/vb-net-two-dot-rule-when-working-with-office-applications-2/ - 并消除双点。还建议您避免使用括号符号来进行类型转换。 –
看到这个:https://stackoverflow.com/questions/29067714/vsto-manipulating-com-objects-one-dot-good-two-dots-bad - 对于一个柜台点。 –