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

时间:2015-05-22 18:03:17

标签: c# excel visual-studio visual-studio-2013

我需要从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()

已被执行。

任何帮助都将不胜感激。

2 个答案:

答案 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   循环。