J'essaie de lire un fichier Excel à partir de C# en utilisant COM, et je peux l'ouvrir et le charger très bien. Cependant, je ne veux pas utiliser toutes les données de la feuille (elle se développe mensuellement), juste un certain sous-ensemble qui commence sous le haut de la feuille (ligne 3 pour les en-têtes, ligne 4 pour les données) et va jusqu'au bout . Je peux actuellement obtenir une plage représentant l'ensemble des données comme Excel.Worksheet.UsedRange
, mais ensuite je dois soit le manipuler jusqu'à la plage désirée, ou (de préférence) trouver le point final à passer dans une autre plage pour ma récupération de données réelle. Quelqu'un peut-il me dire comment faire l'un ou l'autre? Merci.Besoin de trouver les points de début et de fin d'une gamme Excel en C#
Répondre
Je ne suis pas sûr de ce que vous essayez de faire. Mais voici quelques exemples.
Supposons que je la gamme suivante:
Excel.Worksheet sheet = this.Application.ActiveSheet as Excel.Worksheet;
Excel.Range range = sheet.get_Range("A1", "B5") as Excel.Range;
Pour déplacer votre gamme vers le bas par n
-nombre de la ligne:
int n = 1;
int rows = range.Rows.Count;
int cols = range.Columns.Count;
Excel.Range newRange = range.get_Offset(n, 0).get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row lower
Pour déplacer votre rangée du bas
Excel.Range newRange = range.get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row higher
Je suppose que vous pouvez comprendre comment le déplacer d'un côté à l'autre.
get_Offset()
va déplacer toute la gamme, puis vous devez redimensionner la gamme.
EDIT: Maintenant que je sais ce que vous voulez.
Pour sélectionner la dernière cellule:
Excel.Range lastCell = range.Cells[rows, cols] as Excel.Range;
lastCell.Select();
Maintenant, vous pouvez utiliser votre propre point de départ comme ceci:
Excel.Range newRange = sheet.get_Range("B1", lastCell);
newRange.Select();
vous avez répondu à votre propre question, mais je pense toujours que cette réponse vous sera utile à long terme. –
Ouais, c'est génial pour quand je connais les positions que je veux aller, mais j'essaie de trouver la position des dernières données quand je ne sais pas ce que ce sera .. –
@Tom, s'il vous plaît, regardez mon mise à jour répondre, il montrera comment faire ce que vous voulez, sans get_Address. –
De MSDN:
« Utilisez la propriété de fin, ainsi qu'une valeur de l'énumération XlDirection (xlUp, xlToRight, xlToLeft, xlDown), pour extraire une plage qui représente la cellule à l'extrémité de la région, comme si vous aviez appuyé sur la touche décrite par la valeur énumérée; "
rngDown = rng.get_End(Excel.XlDirection.xlDown);
il n'y a pas une telle méthode disponible, je pense que vous pensez à get_End –
Lorsque j'ai essayé cela, il a retourné la fin de la feuille contenant (ligne 65536), plutôt que la fin de la UsedRange. –
@Stan, oui vous avez raison c'est une faute d'impression sur le site MS, merci –
Vous devriez être en mesure d'utiliser les Range.Row, Range.Rows.Count, Range.Column et Range.Columns.Count propriétés pour obtenir le début et la fin de votre gamme comme ceci:
Dim used As Range, first As Range, last As Range
Set used = Sheet1.UsedRange
Set first = Sheet1.Cells(used.Row, used.Column)
Set last = Sheet1.Cells(used.Row + used.Rows.Count, used.Column + used.Columns.Count)
MsgBox ("First: " + first.Address + " Last: " + last.Address)
Ce code exemple est en VBA, mais toutes ces fonctions devraient être disponibles en C# avec COM.
@Joseph, il y avait une faute d'impression sur le site MS, utilisez get_End à la place –
assurez-vous soit d'abord sélectionner une cellule, ou l'utiliser dans un syndicat formulaire –
Ok, trouvé une réponse (après presque 3 heures de recherche totale, demandé ici 2 heures), donc poster ici pour les autres.
Excel.Range urange = (Excel.Range)xlWorkSheet.UsedRange; // gives us the actual range
string used = urange.get_Address(false, false, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
De MSDN:
public string get_Address (
[OptionalAttribute] Object RowAbsolute,
[OptionalAttribute] Object ColumnAbsolute,
[OptionalAttribute] XlReferenceStyle ReferenceStyle,
[OptionalAttribute] Object External,
[OptionalAttribute] Object RelativeTo
)
qui, apparemment, les deux premiers sont des drapeaux vrai/faux, le prochain est défini comme un objet Microsoft.Office.Interop.Excel.XlReferenceStyle
, et je devine que l'extérieur est soit une référence à un fichier externe, ou un drapeau de quelque sorte. RelativeTo, je ne peux que deviner qu'il se réfère à une position arbitraire définie, peut-être un objet range, peut-être une chaîne. Malheureusement, le MSDN est extrêmement rare sur ce sujet, donc je devine juste ici et poster mes suppositions. Cependant, en utilisant ce code comme je l'ai posté, je suis en mesure de récupérer le total utilisé comme "A1: B245" qui me donne exactement ce que je veux, et je peux ensuite créer une nouvelle gamme en extrayant la deuxième partie et ensuite continuez.
Cela fonctionne PARFAIT! Je ne sais pas pourquoi plus de gens n'ont pas regardé cela. –
- 1. Comment trouver des lignes de début et de fin de cellules fusionnées dans Excel avec VBSCript?
- 2. excel vba, trouver une gamme
- 3. Trouver des citations de début et de fin
- 4. C#, Excel: obtenir des infos de gamme
- 5. Trouver début et de fin XY coords de la ligne perpendiculaire calculée à partir de début et de fin XY coords de référence
- 6. Obtenir les positions de début et de fin avec AntLR
- 7. Obtenez commencer gamme et la gamme fin d'une cellule fusionnée verticalement avec Excel à l'aide VBA
- 8. Date de début et de fin d'un mois en cours
- 9. Comment calculer une courbe de Bézier avec seulement des points de début et de fin?
- 10. Trouver Gamme de couleurs
- 11. Date de début et de fin sur plusieurs dates
- 12. Début et fin des secteurs de partitions?
- 13. trouver fin/date de début dans Look MySQL
- 14. Trouver début et fin d'année/mois/jour/heure
- 15. trouver erreur Excel cellules en C#
- 16. Heure de début et de fin à l'aide de jquery
- 17. Points de suspension Iphone Pickerview au début au lieu de la fin
- 18. Trouver des balises de début et de fin dans la chaîne utilisant l'expression rationnelle
- 19. php + mysql: trouver des données d'ici la fin de l'heure et l'heure de début
- 20. Reconnaissance de forme géométrique & Trouver des points extrêmes en C#
- 21. Exception de rejet de gamme en C++
- 22. sortie manuellement HAML balises de début et de fin
- 23. Comment obtenir les dates de début et de fin du mois en cours
- 24. Supprimer les espaces blancs de début/de fin dans JAXB?
- 25. Jquery: DatePicker: date de début/fin
- 26. Les points de fin sont supprimés de l'URL
- 27. Date de fabrication gamme
- 28. début de match de C# RegEx de ficelle et début de mot en même temps
- 29. Comparer la plage d'adresses IP avec l'adresse IP de début et de fin dans MySQL
- 30. Android Scrollview: Comment détecter début et fin de scrollview
laissez-moi savoir si vous avez besoin d'aide avec ma réponse, je n » étais pas Assurez-vous de la profondeur de votre expérience Excel –
Pouvez-vous être plus précis dans votre question, de quoi exactement avez-vous besoin? Est-ce que UsedRange renvoie la plage correcte et que vous voulez simplement la redimensionner? –
Stan, c'est exactement ça. Je ne veux pas toute la gamme, juste le point final pour que je puisse utiliser mon propre point de départ. –