.Net Interop di Excel Eliminazione di un foglio di lavoro

Sto cercando di eliminare un foglio di lavoro da un documento Excel da un’applicazione .Net c # 3.5 con la class di Excel di interoperabilità (per Excel 2003).

Provo molte cose come:

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

Non funziona e non genera errori …

Dopo più di un’ora guardando ho trovato la risposta:

 xlApp.DisplayAlerts = false; worksheet.Delete(); xlApp.DisplayAlerts = true; 

Quando ci occupiamo dell’eliminazione dei fogli di lavoro Excel , ci sono due cose importanti da sapere:

  1. I conteggi di interoperabilità di Excel vanno da 1 (e non da zero), pertanto, la rimozione del secondo elemento causerà il terzo posto. quindi, il modo corretto per rimuovere i fogli di lavoro è dall’ultimo al primo :

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

    in alternativa, puoi eliminare il secondo elemento ([2]) nell’elenco due volte , il che ti darà lo stesso risultato.

  2. La seguente riga genera un’eccezione quando è rimasto solo un foglio di lavoro:

      MyWorkBook.Worksheets[1].Delete(); 

È anche importante notare che la cartella di lavoro deve contenere almeno un foglio di lavoro; questo significa che non puoi cancellare tutti i fogli di lavoro in una cartella di lavoro.

 Microsoft.Office.Interop.Excel.Worksheet worksheet = Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets[1]; worksheet.Delete(); 

Prova a trovare il foglio di lavoro per nome:

 var app = new Microsoft.Office.Interop.Excel.Application(); var workbook = app.Workbooks.Add(); ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete(); 

possiamo cancellare il foglio di lavoro come questo

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

e usa questo

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

Cancelliamo i fogli di lavoro excel dall’applicazione di console in # come in questo modo:

  Microsoft.Office.Interop.Excel.Worksheet worksheet = (Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"]; worksheet.Delete();