代码之家  ›  专栏  ›  技术社区  ›  ps.

检查Excel中是否存在工作表

  •  4
  • ps.  · 技术社区  · 15 年前

    如何使用interop检查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 回复  |  直到 10 年前
        1
  •  11
  •   Community CDub    13 年前

    您有工作簿对象吗?如果是这样,您可以遍历workbook.sheets数组并检查每个工作表的name属性。

    foreach (Sheet sheet in workbook.Sheets)
    {
        if (sheet.Name.equals("sheetName"))
        {
            //do something
        }
    }
    
        2
  •  3
  •   Hans Passant    15 年前

    首先考虑一个异常是否实际上不合适。您希望在那里有一个具有特定名称的工作表。如果不是,你能继续有意义地运行你的程序吗?

    如果可以,可以通过迭代sheets集合并在name属性上查找匹配项来避免异常。

        3
  •  3
  •   pmartin    10 年前

    下面是一种LINQ方法(如果工作表不存在,则此方法返回空值):

    workbook.Worksheets.Cast<Worksheet>().FirstOrDefault(worksheet => worksheet.Name == worksheetName);
    
        4
  •  0
  •   Makatun    10 年前

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

    if(sheet.parent==工作簿)

    推荐文章