проверьте, существует ли лист в Excel - PullRequest
4 голосов
/ 27 апреля 2010

Как проверить, существует ли лист в Excel с помощью взаимодействия. Я попробовал следующее, но он выдает COMException, если не там .. Есть ли лучший способ выяснить, чем на самом деле глядя на исключение

    Worksheet sheet = null;
    Sheets worksheets = some;

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

Edit:

Спасибо за вклад, ребята.

я написал функцию

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 ]

11 голосов
/ 27 апреля 2010

У вас есть объект Workbook?Если это так, вы можете перебрать массив Workbook.Sheets и проверить свойство Name каждого листа.

foreach (Sheet sheet in workbook.Sheets)
{
    if (sheet.Name.equals("sheetName"))
    {
        //do something
    }
}
3 голосов
/ 09 апреля 2015

Вот способ LINQ сделать это (и этот метод возвращает ноль, если лист не существует):

workbook.Worksheets.Cast<Worksheet>().FirstOrDefault(worksheet => worksheet.Name == worksheetName);
3 голосов
/ 27 апреля 2010

Сначала рассмотрите, не является ли исключение действительно уместным. Вы ожидаете, что там будет лист с определенным именем. Если это не так, можете ли вы по-прежнему иметь смысл продолжать запускать вашу программу?

Если вы можете, вы можете избежать исключения, перебирая коллекцию листов и ища соответствие в свойстве Name.

0 голосов
/ 12 апреля 2015

Если у вас есть объекты листа и рабочей книги, вы можете выполнить родительскую проверку

if (sheet.Parent == рабочая книга)

...