Wie man eine Spaltennummer (zB 127) in eine Excel-Spalte umwandelt (zB AA)
Wie konvertieren Sie eine numerische Zahl in einer Excel-Spalte-Namen in C# ohne mithilfe der Automatisierung immer den Wert direkt aus Excel.
Excel 2007 wurde ein möglicher Bereich von 1 bis 16384, der die Anzahl der Spalten, die Sie unterstützt. Die resultierenden Werte sollten in form von excel-Spalte-Namen, z.B. A, AA, AAA usw.
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich es mache:
InformationsquelleAutor der Antwort
Wenn jemand braucht, um dies zu tun in Excel, ohne VBA, hier ist eine Möglichkeit:
wo spaltnum ist die Spalte Nummer
Und in VBA:
InformationsquelleAutor der Antwort
Sorry, das ist Python statt C#, aber zumindest die Ergebnisse korrekt sind:
InformationsquelleAutor der Antwort
Müssen Sie möglicherweise Konvertierung in beide Richtungen, e.g von Excel-Spalte Adresse wie AAZ, integer und aus einer Ganzzahl in Excel. Die folgenden beiden Methoden wird genau das tun. Übernimmt die 1-basierte Indizierung, erstes element in Ihre "Felder" werden als element Nummer 1.
Keine Begrenzungen auf der Größe hier, so dass Sie verwenden können Adressen wie "ERROR" und das wäre Spalte Anzahl 2613824 ...
InformationsquelleAutor der Antwort
Entdeckte ich einen Fehler in meinem ersten post, also habe ich beschlossen, sich hinzusetzen und zu tun, die die Mathematik. Was ich gefunden habe ist, dass die Anzahl system zur Identifizierung Excel-Spalten ist nicht eine base 26 system, als eine andere person gebucht. Betrachten Sie die folgenden in der Basis 10. Sie können dies auch tun, mit den Buchstaben des Alphabets.
Raum:.........................S1, S2, S3 : S1, S2, S3
....................................0, 00, 000 :.. A, AA, AAA
....................................1, 01, 001 :.. B, AB, AAB
.................................... ..., ..., ... :.. ..., ..., ...
....................................9, 99, 999 :.. Z, ZZ, ZZZ
Insgesamt Staaten im Raum: 10, 100, 1000 : 26, 676, 17576
Insgesamt Staaten:...............1110................18278
Excel zahlen-Spalten in den einzelnen alphabetischer Räume mit base-26. Sie können sehen, dass in der Regel der Zustandsraum progression a, a^2, a^3, ... für einige base ein, und die Gesamtzahl der Staaten ist a + a^2 + a^3 + ... .
Angenommen, Sie möchten, finden Sie die Gesamtzahl der Staaten in den ersten N Leerzeichen. Die Formel dafür ist also A = (a)(a^N - 1 )/(a-1). Das ist wichtig, denn wir brauchen den Platz N entspricht unserem index K., Wenn ich herausfinden will, wo K liegt in der Anzahl-system, die ich brauche zu ersetzen, Eine mit K und lösen für N. Die Lösung ist N = log{Basis} (A (A-1)/a +1). Wenn ich das Beispiel a = 10 und K = 192, ich weiß, dass N = 2.23804... . Das sagt mir, dass K liegt am Anfang des Dritten Platz, da ist es ein wenig größer ist als zwei.
Der nächste Schritt ist zu finden, genau wie weit in der aktuellen Raum, in dem wir sind. Um diese zu finden, subtrahieren Sie von K A generiert mit dem Stock N. In diesem Beispiel, der Boden N ist zwei. So, = (10)(10^2 – 1)/(10-1) = 110, so ist zu erwarten, wenn Sie kombinieren die Mitgliedstaaten die ersten beiden Räume. Diese muss abgezogen werden aus K, weil diese ersten 110 Staaten bereits entfielen in den ersten beiden Räume. Dies lässt uns mit 82 Staaten. Also, in diesem Zahlensystem, die Darstellung der 192 in Basis 10 082.
Den C# - code mit einer base index von null ist
//Alte Post
Einen null-basierten Lösung in C#.
InformationsquelleAutor der Antwort
Update: Peter's Kommentar ist richtig. Das ist, was ich bekomme für das schreiben von code im browser. 🙂 Meine Lösung war es nicht kompilieren, es fehlte die Links-die meisten Buchstaben, und es war der Bau der string in umgekehrter Reihenfolge - alle jetzt behoben.
Bugs beiseite, der Algorithmus ist im Grunde die Umwandlung einer Reihe von der Basis 10 zur Basis 26.
Update 2: Joel Coehoorn ist richtig, der obige code wird zurückgeben, AB 27. Wenn es real war base 26 Anzahl, AA wäre gleich Ein und die nächste Zahl nach Z wäre BA.
InformationsquelleAutor der Antwort
Einfach mit Rekursion.
InformationsquelleAutor der Antwort
Diese Antwort ist in javaScript:
InformationsquelleAutor der Antwort
Ich bin überrascht, dass alle Lösungen, die bisher enthalten entweder iteration oder Rekursion.
Hier ist meine Lösung, die läuft in konstanter Zeit (keine Schleifen). Diese Lösung funktioniert für alle möglichen Excel-Spalten und prüft, ob die Eingabe kann verwandelt werden in ein Excel-Spalte. Mögliche Spalten sind im Bereich [A, XFD] oder [1, 16384]. (Dies ist abhängig von Ihrer Excel-version)
InformationsquelleAutor der Antwort
..Und konvertiert php:
InformationsquelleAutor der Antwort
Gleiche Implementierung in Java
InformationsquelleAutor der Antwort
Nach einem Blick auf alle ausgelieferten Versionen hier, ich descided zu tun, selbst einer, mit Rekursion.
Hier ist meine vb.net Version:
InformationsquelleAutor der Antwort
Ein wenig spät, um das Spiel, aber hier der code, den ich verwende (in C#):
InformationsquelleAutor der Antwort
wenn Sie nur wollen, dass es für eine Zelle die Formel ohne code, hier ist eine Formel für Sie:
InformationsquelleAutor der Antwort
In Delphi (Pascal):
InformationsquelleAutor der Antwort
Ich wollte zu werfen, in meine statische Klasse, die ich verwenden, für interoping zwischen col-index und col-Label. Ich benutze eine modifizierte akzeptierte Antwort auf meine ColumnLabel Methode
Verwenden Sie diese wie...
InformationsquelleAutor der Antwort
Nur zu werfen in ein einfaches zwei-line C# - Implementierung mit Rekursion, weil alle Antworten hier scheinen viel komplizierter, als nötig.
InformationsquelleAutor der Antwort
Seine nicht gerade base-26, es gibt keine 0 in das system. Wenn es war, 'Z' gefolgt von 'BA', nicht von 'AA'.
InformationsquelleAutor der Antwort
Verfeinerung der ursprünglichen Lösung (in C#):
InformationsquelleAutor der Antwort
Hier ist eine Actionscript-version:
InformationsquelleAutor der Antwort
JavaScript-Lösung
InformationsquelleAutor der Antwort
In perl, für einen Eingang von 1 (A), 27 (AA), etc.
InformationsquelleAutor der Antwort
Hier ist mein super-spät-Implementierung in PHP. Diese ist rekursiv. Ich schrieb es, kurz bevor ich Sie fand diesen Beitrag. Ich wollte sehen, ob andere hatten dieses problem schon...
InformationsquelleAutor der Antwort
Ich versuche zu tun, die gleiche Sache in Java,...
Ich habe schrieb folgenden code:
Nun mal ich lief es mit spalteanzahl = 29, es gibt mir das Ergebnis = "CA" (anstelle von "AC")
keine Kommentare, was ich bin fehlt?
Ich weiß, ich kann es rückgängig zu machen durch StringBuilder.... Aber ein Blick auf die Graham die Antwort, ich bin etwas verwirrt....
InformationsquelleAutor der Antwort
Einem anderen VBA-Weg
InformationsquelleAutor der Antwort
Diese meine codes zu konvertieren bestimmte Anzahl (index bei 1 beginnt), um Excel-Spalte.
Mein Unit-Test:
InformationsquelleAutor der Antwort
Sorry, das ist Python statt C#, aber zumindest die Ergebnisse korrekt sind:
Bestanden diesen test-Fälle:
InformationsquelleAutor der Antwort
Ich bin mit diesem ein in VB.NET 2003, und es funktioniert gut...
InformationsquelleAutor der Antwort
Andere Lösung:
siehe mehr hier - Zellbezügen in Excel für alle! von Dr. Nitin Paranjape
InformationsquelleAutor der Antwort
InformationsquelleAutor der Antwort