.Net Excel Interop Удаление листа - PullRequest
22 голосов
/ 24 марта 2009

Я пытаюсь удалить лист из документа Excel из приложения .Net c # 3.5 с помощью класса взаимодействия inter-Excel (для Excel 2003).

Я пробую много вещей, таких как:

Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Delete();

Это не работает и не выдает никакой ошибки ...

Ответы [ 7 ]

61 голосов
/ 24 марта 2009

После более чем одного часа поиска я нашел ответ:

xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
10 голосов
/ 01 июля 2011

При работе с Excel Worksheets необходимо знать две важные вещи:

  1. Взаимодействие Excel считает от 1 (а не от нуля), поэтому удаление второго элемента приведет к тому, что третий элемент займет свое место !. Итак, правильный способ удаления рабочих таблиц - от до последнего :

    // Remove LAST worksheet
    MyWorkBook.Worksheets[3].Delete();
    
    // and only then remove the second (which is the last one)
    MyWorkBook.Worksheets[2].Delete();
    

    альтернативно, вы можете удалить второй элемент ([2]) из списка дважды , что даст вам тот же результат.

  2. Следующая строка вызовет исключение, когда у вас останется только один рабочий лист:

     MyWorkBook.Worksheets[1].Delete();
    
7 голосов
/ 29 апреля 2009

Также важно отметить, что рабочая книга должна содержать хотя бы один рабочий лист; это означает, что вы не можете удалить все рабочие листы в рабочей книге.

0 голосов
/ 07 сентября 2017

мы можем удалить рабочий лист вот так

 Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

                if (xlApp == null)
                {

                    return;
                }


                xlApp.DisplayAlerts = false;
                string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
                                        + "\\Sample.xlsx";
                Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                Excel.Sheets worksheets = xlWorkBook.Worksheets;

                worksheets[4].Delete();
                worksheets[3].Delete();
                xlWorkBook.Save();
                xlWorkBook.Close();

                releaseObject(worksheets);
                releaseObject(xlWorkBook);
                releaseObject(xlApp);

и используйте это

  static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                throw ex;

            }
            finally
            {
                GC.Collect();
            }
        }
0 голосов
/ 22 июня 2017

Мы удаляем таблицы Excel из консольного приложения c # следующим образом:

 Microsoft.Office.Interop.Excel.Worksheet worksheet = 
 (Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"];
 worksheet.Delete();
0 голосов
/ 29 апреля 2014

Попробуйте найти лист по имени:

var app = new Microsoft.Office.Interop.Excel.Application();
var workbook = app.Workbooks.Add();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete();
0 голосов
/ 20 марта 2012
Microsoft.Office.Interop.Excel.Worksheet worksheet = Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets[1];
worksheet.Delete();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...