2017-03-09 1 views
1

J'utilise C# Interop pour obtenir les valeurs à partir d'une feuille de calcul Excel en fonction d'un paramètre passé à une fonction et je reçois l'erreur suivante:C# Interop le nom n'existe pas dans le contexte actuel

the name 'sheet' does not exist in the current context

Ceci est mon code:

public void getIndexes(int num) 
{ 
    var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 
    var wsEvars = wb.Sheets["Evars"]; 
    var wsEvents = wb.Sheets["Events"]; 

    if (num == 0) 
    { 
     var sheet = wsEvars; 
    } 
    if (num == 2) 
    { 
     var sheet = wsEvents; 
    } 

    if (num != 2) 
    { 
     var rng = (Excel.Range)sheet.Range[sheet.Cells[3, 2], sheet.Cells[3, 25]]; 
    } 
} 

Je suppose que la variable sheet doit être initialisé avant la première instruction if ... mais qui devrait être le type de cette variable car il est un objet COM?

enter image description here

+3

Il est juste un dans les deux cas 'Excel.Worksheet'. Donc 'Excel.Worksheet sheet = null;' avant le premier 'if' comme vous l'avez dit. – Equalsk

+0

Que faire si quelqu'un passe une valeur 'int' qui n'est pas' 0' ou '2'? On dirait que vous pourriez vouloir un 'enum' à la place. – Equalsk

+0

Les valeurs sont passées d'une autre fonction, et ils peuvent être seulement 0 et 2 – Valip

Répondre

1

Le type que vous recherchez est Excel.Worksheet.

Comme vous l'avez deviné, vous pouvez le déclarer avant la première instruction if.

public void getIndexes(int num) 
{ 
    var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 
    var wsEvars = wb.Sheets["Evars"]; 
    var wsEvents = wb.Sheets["Events"]; 

    Excel.Worksheet sheet = null; // Declared here 

    if (num == 0) 
    { 
     sheet = wsEvars; 
     // Rest of code 
     ... 

Pour référence, vous pouvez passer la souris sur le mot-clé var et l'info-bulle vous indique le type il compilera à.

enter image description here

+0

Encore une question ... savez-vous aussi comment je peux obtenir les valeurs de la plage spécifiée dans mon code? J'ai essayé avec 'var wsValues ​​= rng.Value();' mais ne fonctionne pas – Valip

+1

@Valip Au sommet de ma tête je pense que c'est 'var values ​​= rng.Cells.Value;' (il pourrait être 'Value2') et ensuite 'values' contient un tableau des valeurs. Ne pas avoir un projet interop en main pour tester si. – Equalsk

+0

Cela fonctionne en utilisant 'var values ​​= rng.Cells.Value;', Merci! – Valip

0

Si vous avez un ensemble de référence à l'Interop Excel de toute façon alors les déclarer comme ceci:

Excel.Worksheet sheet = null; 
Excel.Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook; 
Excel.Worksheet wsEvars = wb.Sheets["Evars"]; 
Excel.Worksheet wsEvents = wb.Sheets["Events"];