Hallo zusammen,
Ich lese hier schon eine Weile mit und habe nun die Sufu ordentlich rangenommen, aber entweder nehme ich nicht die richtigen Schlagworte oder es hatte noch keiner das Problem.
Das Problem ist folgendes, ich baue Unittests und habe nun in diesen Tests einen Fehler entdeckt der auf kurz oder lang doch recht kritisch werden kann. Die Funktion die getestet wird konvertiert Spaltennamen in Excel, also A, B, C.. usw, bis Z ist alles tutti. Dann kommen wir aber zu AA, AB, AC.. und der Fehler tritt dann bei AZ auf. Also Spalte 52 müsste (und ist es auch im Excel) AZ sein aber der Debugger sagt: Es ist B. Spalte 53 ist dann aber wie gewollt BA. Gleiches tritt dann natürlich auch bei BZ auf, BZ ist dann B und CZ ist C. Das ist wie bei Nummerierungen im WinExplorer die Zahlen 01, 10, 11 werden zusammen geschoben, ist ja überall ne eins drin(So fühlt es sich zumindest an).
Nun versuche ich eine Lösung zu finden, wie man der Funktion erklären kann das Spalte 52 nicht B sonder AZ ist. Meine Erste Überlegung war: Z dranhängen, funktioniert so aber nicht da er aus dem AZ ja B macht. Dann ging die Überlegung in die Richtung das ich jede 26. Spalte nehme (ab einschließlich 52) und sage das ist nicht B sondern AZ, das ist nicht C sonder BZ und so weiter... (Ich bin mir dessen bewusst das man meinem Gedanken kann schlecht folgen könnte, weiß es aber im moment nicht besser auszudrücken).
Ich weiß nicht von welcher Seite ich das Pferd aufsatteln soll
In welche Richtung muss ich denken, damit ich einen Weg finde dem Compiler zu sagen das die Spaltenübergänge ein Z haben und nicht den zuletzt verwendetetn Buchstaben?
Hier noch die Funktion:
Delphi-Quellcode:
function MS_EXCEL_ConvertColumn(AColumn: Integer):
String;
begin
Result := '
';
while AColumn > 0
do
begin
if AColumn <= 26
then
begin
Result := Result + Chr(AColumn + 64);
Dec(AColumn, 26);
end
else
begin
Result := Result + Chr((AColumn -27)
div 26 + 65);
// Mit dieser umgeschrieben Zeile habe ich schon mal bei 'AZ' nur A statt B, jetzt fehlt mir noch das Z dahinter
AColumn := AColumn
mod 26;
end;
end;
Diese Funktion wurde nicht von mir geschrieben, ich teste sie nur und suche nach Fehlern, will sie aber nun abändern da Fehler keineswegs ignoriert werden sollten
LG