![]() |
Spaltennummer nach Excel-Spaltenstring umwandeln.
In Excel werden die Spaltenüberschriften ja mit Buchstaben Angezeigt. ( A,B,C,D....AA,AB,AC....usw)
Ich benötige eine Funktion, bei der ich die Spaltennummer übergebe und diese Excelüberschrift erhalte. z.B.
Delphi-Quellcode:
result:=GetSpreadsheetColname(28); // -> Ergebnis = 'AB'
Kann ich mir natürlich selber schreiben. Vieleicht gibt's aber schon was fertiges. Manchmal sieht man ja den Wald vor lauter Bäumen nicht. |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Moin.
Ich wüsste nun auch nichts fertiges, müsste man wohl selbst schreiben. Eine Funktion die immer aufgerufen wird, solange
Code:
immer den entsprechenden Buchstaben und die Differenz zu 26 zurückgibt. Mit der Differnz dann wieder in die Funktion, usw..
Zahl < 26
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Mit der hier beschriebenen Funktion klappt das :
![]() |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Wenn's in Delphi berechnet werden soll, vllt. so ungefähr:
- Wenn n<=26 dann CHR(64+n) - Wenn n<=26*26 dann CHR(64+(n div 26))+CHR(64+(n mod 26)) |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Delphi-Quellcode:
Das könnte funktionieren. Es konvertiert einfach eine Dezimalzahl in eine Zahl zur Basis 26, wobei die 'Ziffern' der neuen Zahlenbasis unseren Buchstaben A-Z entsprechen.
Function ExcelSpalte (Nummer : Integer : String;
Var result : string; Begin if (nummer<=0) raise new exception.Create('Nummer muß > 0 sein'); result := ''; repeat result := Result+chr(64+nummer mod 26); nummer := nummer div 26; until nummer = 0; // return result; so macht man das in C#, aber ist das C#? Nein. Delphi, also... weg. end; |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Wobei es, wenn ich mich gerade nicht verdenke, glaub ich heißen müsste:
Delphi-Quellcode:
und man muss an den Grenzfällen aufpassen, z.B. n=26.
result := chr(65+nummer mod 26) + result;
Das geht dann in die Hose. |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Wenn die 1 ein 'A' sein soll, müssen 64 addiert werden und nicht 65. Außerdem wird es vermutlich Probleme geben, wenn Nummer glatt durch 26 teilbar ist, aber das ließe sich mit einem Schreibtischtest herausfinden.
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Ich denke, es ging ihm eher um die Vorgehensweise als um funktionierenden Out-of-the-box-Code.
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
Das Problem mit direkt durch 26 teilbar muss man mit einem
Code:
abfangen.
n div 26
Da weiß man dann, wie viele Stellen mindestens mit 'A' belegt werden sollten. |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
Also: 0=>A, 1=>B .... Ich korrigiere... |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
@DeddyH: Ne, auf die Vorgehensweise bin ich selber gekommen. Mir ist es aber schon öfter passiert, daß ich eine Funktion geschrieben habe, die es schon * in der RTL gibt * in den Jedis gibt * sonstwo gibt. Grade wenn es in der RTL eine Funktion schon gibt, dann möchte ich diese auch verwenden. Aber wie ich oben schon sagt. Wald -> Bäume -> :-( |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Mit "ihm" war Dejan Vu gemeint, ich bezog mich dabei auf bauminas Einwand bzgl. Delphi-Code.
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Wer denn auch mal die Lösung braucht. Habe mal aus den Vorschlägen eine Funktion gebastelt. Für die Spalten "A" bis "ZZ".
Delphi-Quellcode:
function GetSpreadsheetColname(aIndex: Integer): string;
begin if not InRange(aIndex, 0, 701) then raise Exception.Create('GetSpreadsheetColname -> Index out of range (0-701): ' + IntToStr(aIndex)); Result := chr(65 + aIndex mod 26); aIndex := aIndex div 26; if aIndex > 0 then Result := chr(64 + aIndex) + Result; end; |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Das dürfte doch auch bei n=26 (und vielfachen davon) schief gehen.
Schreibtischtest: für aIndex=26: Result := chr(65 + aIndex mod 26) => chr(65 + 26 mod 26) => chr(65 + 0) => chr(65) => A aIndex := aIndex div 26 => 26 div 26 => 1 if aIndex > 0 then => if 1>0 then => Wahr Result := chr(64 + aIndex) + Result => chr(64+1)+CHR(65) => AA |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Die hab ich schon längere Zeit im Einsatz:
Delphi-Quellcode:
Die kleinste Spalte hat die Nummer 1.
function GetColName(ACol: Integer): string;
begin ACol := ACol - 1; Result := Chr(Ord('A') + (ACol mod 26)); if ACol >= 26 then Result := GetColName(ACol div 26) + Result; end; |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
Ich fange mit dem Index = 0 an. 0 = A 1 = B . . . 25 = Z 26 = AA 27 = AB genau so bauche ich das. Und es funktioniert ;-) |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Delphi-Quellcode:
So gehts für alle Integer, glaube ich zumindest.
function XlsCol(col : integer) : String;
begin Assert (col>0,'Col must be > 0 '); result :=''; repeat result := chr (65 + (col - 1) mod 26]+result; col := (col - 1) div 26; until col=0; end; |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Ein schönes Beispiel das man jede Rekursion auch als Iteration darstellen kann oder umgekehrt.
Ich würde die Abbruchbedingung vorher testen, dann gibts auch kein direktes Problem wenn ein Wert <= 0 übergeben wird. Und die Subtraktion nur einmal.
Delphi-Quellcode:
function XlsCol(col : integer) : String;
begin Assert(col > 0, 'Col must be > 0'); Result := ''; while col > 0 do begin col := col - 1; Result := chr(65 + col mod 26] + Result; col := col div 26; end; end; |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Rekursion?
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Hallo bernau,
die Spaltenüberschriften müssen aber nicht zwingend mit Buchstaben angezeigt werden. Wenn man in Excel (z.B.: Excel 2007) unter [Excel-Optionen][ Formeln] „Z1S1 – Bezugsart “ einen Hacken setzt, so werden die Spalten als Zahlen angezeigt. Bis bald Chemiker |
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Das ist gemein. Die ganze Arbeit umsonst.
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
Das war aber mal anders, Zitat aus #1: Zitat:
|
AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
Zitat:
Delphi-Quellcode:
einfügen und schon beginnt die Spalte bei 1;
index:=index-1;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz