我需要从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()
已被执行。
任何帮助都将不胜感激。
答案 0 :(得分:1)
迭代时删除可能有点棘手。你正在迭代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);
}
答案 1 :(得分:0)
在foreach
中进行迭代时,无法从基础集合中删除。请改用for
循环
From MSDN :
foreach 语句为每个语句重复一组嵌入式语句 数组中的元素或实现的数组 System.Collections.IEnumerable或 System.Collections.Generic.IEnumerable接口。 foreach statement用于迭代集合以获取 您想要的信息,但不能用于添加或删除项目 从源集合中避免不可预测的副作用。如果你 需要在源集合中添加或删除项目,使用for 循环。强>