2017-03-09 1 views
1

J'essaie d'obtenir la dernière ligne avec des données d'une colonne spécifique et je reçois l'erreur suivante lors de l'exécution de mon code:C# Interop obtenir la dernière rangée avec des données à partir d'une colonne spécifique

Impossible de obtenir la propriété COUNTA de la classe WorksheetFunction

var xlApp = new Microsoft.Office.Interop.Excel.Application(); 
var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 
var wsConfig = wb.Sheets["Config"]; 

var usedRows = xlApp.WorksheetFunction.CountA(wsConfig.Columns[9]); 

a également essayé le code suivant, mais revient:

Exception de HRESULT: 0x800A03EC

var usedRows = wsConfig.Range["I1", wsConfig.Cells[1, wsConfig.Rows.Count]].End(Excel.XlDirection.xlDown).Value; 

Exemple:

Colonne I
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| |

=>usedRows = 5 car il y a 5 lignes avec des données sur la colonne I

+0

Le message d'erreur signifie simplement que vous avez passé les 'CountA' fonctionnent un argument incorrect. Je crois qu'il attend un 'Excel.Range' valide. Si c'est la neuvième colonne, je pense que ce devrait être 'wsConfig.Columns (" I: I ")' que vous passez à 'CountA' mais je suppose que je n'ai pas de projet à portée de main. – Equalsk

+0

Oh, je pense que si vous regardez ici la réponse acceptée pourrait être ce que vous voulez: http://stackoverflow.com/questions/5411355/how-do-i-get-an-entire-column-in-used-range – Equalsk

+0

J'ai essayé ça mais ça renvoie 51 (nombre total de lignes). – Valip

Répondre

1

La méthode classique pour obtenir la dernière ligne utilisée dans une colonne (par exemple A) est:

last = Sheets("Sheet1").Range("A" & Sheets("Sheet1").Rows.Count).End(xlUp).Row 

qui dit "Travailler à partir de la dernière ligne disponible dans la feuille de calcul (changements de version en version) vont vers le haut jusqu'à ce que vous frappez une cellule avec une valeur - votre dernière rangée.

Vous pouvez écrire cela dans votre exemple (pour la colonne I) avec:

var usedRows = wsConfig.Range["I" + wsConfig.Rows.Count.ToString()].End(Excel.XlDirection.xlUp).Row;