Obtenir l'Index de Colonne d'une Cellule dans Excel à l'aide d'OpenXML C#
J'ai été en regardant autour pour un certain temps maintenant, et n'arrive pas à trouver comment faire cela.
J'ai une feuille excel, je suis en train de lire à l'aide d'OpenXML. Maintenant, la chose normale serait de boucle sur les lignes et ensuite une boucle à travers les cellules pour obtenir les valeurs, ce qui est bien. Mais avec les valeurs que j'ai besoin de l'emplacement de la cellule, ce qui serait dans le format (rowindex, ColumnIndex). J'ai réussi à obtenir le rowIndex, mais ne peut pas sembler comprendre l'obtention de l'Index de colonne.
Fait, je pensais que cela allait être facile, mais apparemment, il n'est pas.
Pour les futurs lecteurs, je vous recommande voir cette réponse.
OriginalL'auteur QV1 | 2015-03-05
Vous devez vous connecter pour publier un commentaire.
C'est un peu plus compliqué que vous pouvez l'imaginer, parce que le schéma permet pour les cellules vides être omis.
Pour obtenir l'index, vous pouvez utiliser le
Cellule
objet wihch a unCellReference
de la propriété qui donne la référence dans le formatA1
,B1
etc. Vous pouvez utiliser cette référence pour extraire le numéro de la colonne.Comme vous le savez probablement, dans Excel
A = 1
,B = 2
etc jusqu'àZ = 26
à quel point les cellules sont préfixés avecA
pour donnerAA = 27
,AB = 28
etc. Notez que dans le cas deAA
la premièreA
a une valeur de 26 fois le second; c'est à dire qu'il "vaut" 26, alors que le secondA
"vaut" 1 ce qui donne un total de 27.De travailler sur l'index de colonne vous pouvez inverser les lettres, puis prendre la valeur de la première lettre et l'ajouter au total. Puis prendre la valeur de la deuxième lettre et de le multiplier par 26, ajouter le total pour le premier numéro. Pour la troisième, vous multipliez par 26 deux fois et d'ajouter, pour la quatrième multiplier par 26 3 fois et ainsi de suite.
Donc pour la colonne
ABC
vous feriez:En C# le suivant:
Noter que le
CellReference
est pas la garantie d'être dans le XML (bien que je n'ai jamais vu, il est pas là). Dans le cas où leCellReference
est null, la cellule est placée à la gauche de cellules disponibles. LeRowIndex
est pas obligatoire dans la spec, donc il peut être omis, auquel cas, la cellule est placée dans le rang le plus élevé disponible. Plus d'informations peuvent être vus dans cette question. Le réponse de @BCdotWEB est bonne approche dans les cas où laCellReference
estnull
.Ce serait le cas avec un Z dans la deuxième lettre? Ne serait-il pas le même que sur la troisième? Donc
Z = 26*26
etA = 1*26*26
. Je me demande depuis que je suis en train de faire l'inverse qui se passe à partir de la cellule de l'index de nom de la cellule.Un
Z
dans la deuxième lettre "vaut" 26. Qui pourraient être ajoutés à 26 fois la valeur de la première lettre. E. g.ZZ
serait(26 * 26) + 26 = 702
. UnA
dans la 3ème colonne "vaut"1
. Qui pourraient être ajoutés à 26 fois la valeur de la deuxième lettre et 26 * 26 fois la valeur de la première. E. gAAA
serait(26 * 26 * 1) + (26 * 1) + 1 = 703
.BTW, si ce n'est toujours pas clair, créer une nouvelle question et une table de ping-moi ici et je vais vous écrire une réponse sur la façon de faire l'inverse.
Ouais, compris après la publication du commentaire. Merci!
OriginalL'auteur petelids
Small is beautifull
64 est ('A' - 1)
merci!
OriginalL'auteur Luc Vandenbroucke
Pour commencer à répondre , je vous invite à regarder cette premier.
Comme je l'ai expliqué il y a PAS moyen facile d'extraire de Ligne et de Colonne. Le plus proche que vous obtiendrez, c'est que l'extraction de
CellReference
d'une cellule qui aurait la forme d'A1
,B2
qui est actuellementCOLUMN_ROW
format.Ce que vous pouvez faire est de l'extrait de Ligne et de Colonne de la
CellReference
. Oui ce serait besoin de vous pour mettre en œuvre une méthode où vous avez besoin de vérifierchar
parchar
à vérifier pour les nombres et les chaînes de caractères.Permet de dire que vous avez
A11
, puis lorsque vous avez besoin de l'indice de colonne, vous devez extraireA
qui donnerait commecolumn 1
. Oui il n'est pas facile, mais c'est la seule façon, à moins que vous simplement choisi de compter les colonnes lorsque vous numérisez/itérer sur les cellules.Nouveau regarder cette questions réponse qui fait la même chose.
Comme expliqué dans la réponse, pas FACILE 🙂 il suffit de compter comme je l'ai souligné dans la question 🙂
Avez-vous eu la réponse pour la question ? Ou vous avez besoin de plus d'explication 🙂
Je l'ai eu, Merci, en Fait, depuis que j'ai juste besoin de l'index, la création d'un compteur pour la cellule boucle fonctionne bien. Je vais poster mon code rapidement, une fois que j'ai terminé le test. Merci de votre aide !
Fine ,, n'oubliez pas de upvote ou la marque de la question comme étant correct si vous pensez que la réponse aide/permet de résoudre le problème 🙂
OriginalL'auteur Kavindu Dodanduwa
OriginalL'auteur Johan Andersson
c'est de trouver le nombre total de colonnes présentes/utilisé
OriginalL'auteur tejashiwini