Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

check if a sheet exists in excel

How do i check if a sheet exists in a excel using interop. I tried the following but it throws an COMException if not there.. Is there a better way of finding out than actually looking at the exception

    Worksheet sheet = null;
    Sheets worksheets = some;

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

Edit:

Thanks for the input guys.

i wrote a function

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;
}

And i use it as below

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


            if (sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate, out sheet))
            {
                //found it.
            }
else
{
// not
}
like image 441
ps. Avatar asked Dec 03 '22 12:12

ps.


2 Answers

Do you have a Workbook object? If so, you can iterate over the Workbook.Sheets array and check the Name property of each Sheet.

foreach (Sheet sheet in workbook.Sheets)
{
    if (sheet.Name.equals("sheetName"))
    {
        //do something
    }
}
like image 117
brydgesk Avatar answered Feb 06 '23 19:02

brydgesk


First consider if an exception isn't actually appropriate. You expect a sheet with a certain name to be there. If it isn't, can you still meaningful continue running your program?

If you can, you can avoid the exception by iterating the sheets collection and look for a match on the Name property.

like image 35
Hans Passant Avatar answered Feb 06 '23 19:02

Hans Passant