从Excel工作簿中删除工作表时出错

我需要从C#中的Excel工作簿中删除一些工作表。

但是,我的代码不起作用。

// **aDeleteList** hold the sheets that need to be deleted from the workbook wbk static void delete_sht(ref MsExcel.Workbook wbk, List<string> aDeleteList) { MsExcel.Sheets my_st = wbk.Sheets; foreach (MsExcel.Worksheet s in my_st) { if (aDeleteList.Contains(s.Name)) s.Delete(); int t1 = my_st.Count; int t = wbk.Sheets.Count; } } 

t和t1的值不会改变

  s.Delete() 

已经执行。

任何帮助,将不胜感激。

在迭代时删除可能有点棘手。 您正在迭代s并试图删除s也。 像这样的东西应该好一点

 static void delete_sht(ref MsExcel.Workbook wbk, List<string> aDeleteList) { MsExcel.Sheets my_st = wbk.Sheets; for (int i = my_st.Count - 1; i >= 0; --i) if (aDeleteList.Contains(my_st[i].Name)) my_st.RemoveAt(i); } 

foreach迭代时,不能从基础集合中删除。 改用for循环。
来自MSDN:

foreach语句为数组中的每个元素或实现了System.Collections.IEnumerable或System.Collections.Generic.IEnumerable接口的对象集合重复一组embedded式语句。 foreach语句用于遍历集合以获取所需信息, 但不能用于从源集合添加或删除项目以避免不可预知的副作用 。 如果您需要添加或删除源集合中的项目,请使用for循环。