2010-04-27 7 views
3

Comment vérifier si une feuille existe dans un Excel en utilisant interop. J'ai essayé ce qui suit, mais il jette un COMException sinon il .. Y at-il une meilleure façon de savoir que la recherche fait à l'exceptionvérifier si une feuille existe en Excel

Worksheet sheet = null; 
    Sheets worksheets = some; 

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

Edit:

Merci pour les gars d'entrée.

i a écrit une fonction

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

et je l'utilise comme ci-dessous

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


      if (sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate, out sheet)) 
      { 
       //found it. 
      } 
else 
{ 
// not 
} 

Répondre

10

Avez-vous un objet classeur? Si c'est le cas, vous pouvez itérer sur le tableau Workbook.Sheets et vérifier la propriété Name de chaque feuille.

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

Considérons d'abord si une exception n'est pas réellement appropriée. Vous vous attendez à une feuille avec un certain nom d'être là. Si ce n'est pas le cas, pouvez-vous continuer à exécuter votre programme? Si vous le pouvez, vous pouvez éviter l'exception en parcourant la collection de feuilles et rechercher une correspondance sur la propriété Nom.

+0

Je dois implémenter la logique selon si une feuille est présente ou non. –

2

Voici une manière LINQ de le faire (et cette méthode renvoie null si la feuille n'existe pas):

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

Si vous avez feuille de calcul et classeur les objets que vous pouvez faire vérifier parent

if (sheet.Parent == classeur)

Questions connexes