Excel自动化C#:如何删除多行? [英] Excel automation C#: How to delete multiple rows?

查看:523
本文介绍了Excel自动化C#:如何删除多行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have the following code and it does not delete the rows, it asks me to save over the current workbook but nothing is saved and EXCEL.EXE continues to run in Task Manager:

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 方法。

I was not able to reproduce your issue exactly. However, in order for the EXCEL.EXE process to terminate completely, you need to make sure you call the ReleaseComObject method on every single COM object that you reference.

为此,您可以按如下所示更新代码:

To do this, you can update your code as follows:

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);

}

这篇关于Excel自动化C#:如何删除多行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆