标签:delete-row c excel
我有以下代码,并且不删除行,它要求我保存当前工作簿,但未保存任何内容,并且EXCEL.EXE继续在任务管理器中运行:
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);
}
标签:delete-row,c,excel 来源: https://codeday.me/bug/20191209/2097064.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。