2009-03-05 17 views
2

Je travaille avec C++ non géré et Excel 2007. J'utilise un appel à l'API Excel4 pour obtenir la gamme de cellules sélectionnées par l'utilisateur. Lorsque l'utilisateur sélectionne ce que j'appelle une plage "commune", cet appel renvoie une plage comme celle-ci "R1C1: R4C3", qui est exactement le 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 uniquement avec des colonnes, quelque chose comme "C1: C3", qui est bien sûr une plage Excel valide, mais cela signifie pour moi que je avoir à le modifier afin qu'il ressemble à la gamme ci-dessus; en d'autres termes, je dois ajouter manuellement la gamme de lignes.Comment faire pour obtenir Dernière cellule active dans Excel 2007

Donc, je prends cette plage "C1C3" et la change pour être "R1C1: R65534C3". À ce stade, vous avez peut-être déjà remarqué mon problème, comme vous pouvez le voir, je suis en train de coder en dur la gamme de lignes à être le nombre maximum de lignes supportées par Excel 2003 (l'application fonctionne aussi avec cette version d'Excel). Ce n'est bien sûr pas ce que je recherche, car une fois que j'ai la plage sélectionnée, je lis les informations dans cette plage et j'utilise cette information pour faire une requête au serveur, alors imaginez que l'utilisateur est seulement entré données jusqu'à la ligne 534 et toujours ma requête aura 65000 lignes avec rien. Donc, ma question est comment puis-je obtenir la dernière cellule dans laquelle l'utilisateur a entré des données, je pense qu'il est appelé la dernière cellule active, donc je peux délimiter ma gamme jusqu'à cette ligne et s'il vous plaît rappelez-vous que je travaille avec code non managé.

+0

Define "données entrées". Est-ce que la cellule doit avoir un contenu? Qu'en est-il d'une formule qui produit une sortie nulle ("")? Qu'en est-il du formatage des cellules visibles? Qu'en est-il de la mise en forme des cellules non visibles (en gras, sur une cellule vide)? Qu'en est-il de la mise en forme conditionnelle qui s'applique? Cela ne s'applique pas? – Sparr

Répondre

3

L'API Excel 4? Vraiment?

Il existe une commande xlcSelectEnd que vous pouvez utiliser pour passer à la dernière cellule avec du texte entré dans n'importe quelle direction à partir d'une cellule donnée.

1

Essayez de fusionner range.selection avec un objet Range.

0
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 
Questions connexes