代码之家  ›  专栏  ›  技术社区  ›  user195488

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

  •  3
  • user195488  · 技术社区  · 15 年前

    我有以下代码,它不删除行,它要求我保存当前工作簿,但不保存任何内容,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);
    }
    
    1 回复  |  直到 11 年前
        1
  •  3
  •   Jim Killingsworth    15 年前

    我无法准确地再现你的问题。但是,为了使excel.exe进程完全终止,需要确保调用 ReleaseComObject 方法对您引用的每个COM对象。

    要执行此操作,您可以按以下方式更新代码:

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