2010-04-27 159 views
3

如何使用互操作检查表格是否存在于Excel中。我尝试以下,但它抛出一个收到COMException如果不是有..难道还有比实际看到异常找出一个更好的办法检查excel中是否存在表格

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 
} 

回答

10

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

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

首先考虑一个异常是否真的不适合。你期望有一个特定名字的工作表在那里。如果不是,你仍然可以继续运行你的程序吗?

如果可以,可以通过迭代图纸集合并在Name属性中查找匹配来避免该异常。

+0

我必须根据工作表是否存在来实现逻辑。 – 2010-04-27 16:36:58

2

这里有一个LINQ的方式来做到这一点(这个方法返回null,如果表不存在):

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

如果你有工作表和工作簿对象,他们可以做家长检查

如果(sheet.Parent ==工作簿)