Comment obtenir la dernière cellule active dans Excel 2007
-
03-07-2019 - |
Question
Je travaille avec C ++ non géré et Excel 2007. J'utilise un appel à l'API Excel4 pour obtenir la plage de cellules sélectionnée par l'utilisateur.
Lorsque l'utilisateur sélectionne ce que j'appelle un "commun" plage, cet appel renvoie une plage comme celle-ci "R1C1: R4C3", qui correspond exactement au format dont j'ai besoin pour effectuer d'autres opérations dans mon application.
Cependant, lorsque l'utilisateur décide de sélectionner des colonnes entières, cet appel d'API renvoie une plage contenant uniquement des colonnes, comme "C1: C3", qui est bien sûr une plage Excel valide, mais cela signifie pour moi que faut le modifier pour qu'il ressemble à la plage ci-dessus; en d'autres termes, je dois l'ajouter manuellement à la plage de lignes.
Je prends donc cette gamme "C1C3" et changez-le en "R1C1: R65534C3".
Peut-être avez-vous déjà remarqué mon problème à ce stade, comme vous pouvez le constater, il est difficile de coder la plage de lignes comme le nombre maximal de lignes pris en charge par Excel 2003 (l'application fonctionne également avec cette version d'Excel).
Ce n’est bien sûr pas ce que je recherche, car une fois que j’ai obtenu la plage sélectionnée, je lis les informations de cette plage et l’utilise pour faire une requête au serveur. Imaginez donc que l’utilisateur n’a saisi que des données. jusqu'à la ligne 534 et toujours ma requête aura 65000 lignes sans rien.
Ma question est donc de savoir comment obtenir la dernière cellule dans laquelle l'utilisateur a entré des données. Je pense que cela s'appelle la dernière cellule active. Je peux donc délimiter ma plage jusqu'à cette ligne et me rappeler que je travaille avec des solutions non gérées. code.
La solution
L’API Excel 4? Vraiment?
Il existe une commande xlcSelectEnd que vous pouvez utiliser pour accéder à la dernière cellule dans laquelle le texte est entré dans n'importe quelle direction à partir d'une cellule donnée.
Autres conseils
Essayez de transtyper range.selection en un objet Range.
région Obtenir la dernière ligne utilisée
Excel.ApplicationClass app = new Excel.ApplicationClass();
Excel.Workbook workBook = app.Workbooks.Open(_PathFile,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
// Get the active worksheet using sheet name or active sheet
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;
// Find the last real row
int _InLastRow = workSheet.Cells.Find("*",System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row;
#endregion