Ответ 1
После более чем одного часа поиска я нашел ответ:
xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
Я пытаюсь удалить рабочий лист из документа excel из приложения .Net С# 3.5 с классом interop Excel (для excel 2003).
Я пробую много чего:
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Delete();
Это не работает и не вызывает никаких ошибок...
После более чем одного часа поиска я нашел ответ:
xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
Когда вы работаете с удалением таблиц Excel, вам нужно знать две важные вещи:
Интерполяция 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]) в списке дважды, который даст вам тот же результат.
Следующая строка будет выдавать исключение, если вы оставили только один лист:
MyWorkBook.Worksheets[1].Delete();
Также важно отметить, что книга должна содержать хотя бы один рабочий лист; это означает, что вы не можете удалить все рабочие листы в книге.
Microsoft.Office.Interop.Excel.Worksheet worksheet = Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets[1];
worksheet.Delete();
Попробуйте найти рабочий лист по имени:
var app = new Microsoft.Office.Interop.Excel.Application();
var workbook = app.Workbooks.Add();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete();
Мы удаляем таблицы Excel из консольного приложения С# следующим образом:
Microsoft.Office.Interop.Excel.Worksheet worksheet =
(Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"];
worksheet.Delete();
мы можем удалить рабочий лист, как этот
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();
}
}