Excel自动化C#:如何删除多行?

我有下面的代码,它不删除行,它要求我保存在当前的工作簿上,但没有保存和EXCEL.EXE继续在任务pipe理器中运行:

protected void OpenExcelWorkbook(string fileName) { _app = new Excel.Application(); if (_book == null) { _books = _app.Workbooks; _book = _books.Open(fileName, 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); _sheets = _book.Worksheets; } } protected void CloseExcelWorkbook() { _book.Save(); _book.Close(false, Type.Missing, false); } protected void NAR(object o) { try { if (o != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(o); } finally { o = null; } } private void button1_Click(object sender, EventArgs e) { OpenExcelWorkbook(@"C:\Book2.xls"); _sheet = (Excel.Worksheet)_sheets[1]; _sheet.Select(Type.Missing); Excel.Range range = _sheet.get_Range("A1", "A3"); range.EntireRow.Delete(Type.Missing); NAR(range); NAR(_sheet); CloseExcelWorkbook(); NAR(_book); _app.Quit(); NAR(_app); } 

我无法完全重现您的问题。 但是,为了使EXCEL.EXE进程完全终止,您需要确保在每个引用的COM对象上调用ReleaseComObject方法。

要做到这一点,你可以更新你的代码,如下所示:

 private void button1_Click(object sender, EventArgs e) { OpenExcelWorkbook(@"C:\Book2.xls"); _sheet = (Excel.Worksheet)_sheets[1]; _sheet.Select(Type.Missing); Excel.Range range = _sheet.get_Range("A1", "A3"); Excel.Range entireRow = range.EntireRow; // update entireRow.Delete(Type.Missing); NAR(entireRow); // update NAR(range); NAR(_sheet); NAR(_sheets); // update CloseExcelWorkbook(); NAR(_book); NAR(_books); // update _app.Quit(); NAR(_app); }