2010-04-27 84 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 ==工作簿)