Interop 检查excel中是否存在工作表

Interop 检查excel中是否存在工作表,interop,excel-2007,Interop,Excel 2007,如何使用互操作检查excel中是否存在工作表。我尝试了以下方法,但如果没有,它会抛出一个COMException。。有没有比实际查看异常更好的方法 Worksheet sheet = null; Sheets worksheets = some; sheet = (Worksheet)worksheets.get_Item("sheetName"); if(sheet!=null) { //do something } 编辑: 谢谢大家的意见 我写了一个函数

如何使用互操作检查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;
}
private Dictionary GetSheetsMap(工作表)
{
如果(工作表==null)
抛出新的ArgumentNullException(“工作表”);
字典映射=新字典(StringComparer.CurrentCultureInoRecase);
foreach(工作表中的工作表)
{
地图。添加(s.名称,s);
}
返回图;
}
我使用它如下

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


            if (sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate, out sheet))
            {
                //found it.
            }
else
{
// not
}
Dictionary sheetMap=GetSheetsMap(工作表);
工作表=空;
if(sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate,表外))
{
//找到了。
}
其他的
{
//不是
}

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

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

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


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

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

workbook.Worksheets.Cast().FirstOrDefault(工作表=>worksheet.Name==worksheetName);

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


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

我必须根据是否存在工作表来实现逻辑。
workbook.Worksheets.Cast<Worksheet>().FirstOrDefault(worksheet => worksheet.Name == worksheetName);