检查excel中是否存在工作表

时间:2010-04-27 15:48:10

标签: interop excel-2007

如何使用互操作检查Excel中是否存在工作表。我尝试了以下但是如果不存在则抛出COMException ..是否有更好的方法来查找而不是实际查看异常

    Worksheet sheet = null;
    Sheets worksheets = some;

    sheet = (Worksheet)worksheets.get_Item("sheetName");
    if(sheet!=null)
{
//do something
}

编辑:

感谢输入人员。

我写了一个函数

private Dictionary<string, Worksheet> GetSheetsMap(Sheets worksheets)
{

    if (worksheets == null)
        throw new ArgumentNullException("worksheets");


    Dictionary<string, Worksheet> map = new Dictionary<string, Worksheet>(StringComparer.CurrentCultureIgnoreCase);
    foreach (Worksheet s in worksheets)
    {
        map.Add(s.Name, s);
    }

    return map;
}

我用它如下

 Dictionary<string, Worksheet> sheetMap = GetSheetsMap(worksheets);
            Worksheet sheet = null;


            if (sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate, out sheet))
            {
                //found it.
            }
else
{
// not
}

4 个答案:

答案 0 :(得分:11)

你有一个工作簿对象吗?如果是这样,您可以迭代Workbook.Sheets数组并检查每个Sheet的Name属性。

foreach (Sheet sheet in workbook.Sheets)
{
    if (sheet.Name.equals("sheetName"))
    {
        //do something
    }
}

答案 1 :(得分:3)

首先考虑异常是否真的不合适。您希望有一个具有特定名称的工作表。如果不是,你仍然有意义继续运行你的程序吗?

如果可以,您可以通过迭代工作表集合并在Name属性上查找匹配来避免异常。

答案 2 :(得分:3)

这是一种LINQ方式(如果工作表不存在,此方法返回null):

workbook.Worksheets.Cast<Worksheet>().FirstOrDefault(worksheet => worksheet.Name == worksheetName);

答案 3 :(得分:0)

如果您有工作表和工作簿对象,则可以进行父检查

if(sheet.Parent == workbook)