2010-08-23 3 views
3

У меня есть следующий код и он не удаляет строки, он просит меня, чтобы сохранить над текущей книги, но ничего не сохраняется, и EXCEL.EXE продолжает работать в диспетчере задач:Автоматизация Excel C#: Как удалить несколько строк?

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

ответ

3

я не смог чтобы точно воспроизвести вашу проблему. Однако, чтобы процесс 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); 

} 
+0

Modified 'get_Range' сказать' get_Range ("1: 1", Type.Missing); 'и он работал с обновлениями, как Что ж. Excel не задает никаких вопросов о слиянии и закрытии успешно. Спасибо за вашу помощь. – 2010-08-24 12:52:52

Смежные вопросы