AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Excel,Spaltenkonvertierung, Übergang zu nächstem Buchstaben
Thema durchsuchen
Ansicht
Themen-Optionen

Excel,Spaltenkonvertierung, Übergang zu nächstem Buchstaben

Ein Thema von Khanysha · begonnen am 8. Sep 2015 · letzter Beitrag vom 9. Sep 2015
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: Excel,Spaltenkonvertierung, Übergang zu nächstem Buchstaben

  Alt 8. Sep 2015, 10:00
Im Falle von 52 und aller anderen vielfachen von 26 ist AColumn mod 26 = 0 und das Ganze bricht ab. Mit der folgenden Änderung würde es glaub ich funktionieren:

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;
      if AColumn=0 then
        Result:=Result+'Z';
    end;
  end;
Hier bitte aber bedenken, dass das nur bis Spalte ZZ funktioniert (=27*26 Spalten). Excel geht aber mittlerweile bis XFD, d.h. wenn da mal Gefahr besteht, das ihr so richtig viele Spalten braucht, muss die Funktion nochmal verbessert werden.
Ralph
  Mit Zitat antworten Zitat
Khanysha

Registriert seit: 11. Jun 2015
Ort: Dunkeldeutschland
23 Beiträge
 
Delphi 7 Professional
 
#2

AW: Excel,Spaltenkonvertierung, Übergang zu nächstem Buchstaben

  Alt 8. Sep 2015, 10:40
Im Falle von 52 und aller anderen vielfachen von 26 ist AColumn mod 26 = 0 und das Ganze bricht ab. Mit der folgenden Änderung würde es glaub ich funktionieren:

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;
      if AColumn=0 then
        Result:=Result+'Z';
    end;
  end;
Hier bitte aber bedenken, dass das nur bis Spalte ZZ funktioniert (=27*26 Spalten). Excel geht aber mittlerweile bis XFD, d.h. wenn da mal Gefahr besteht, das ihr so richtig viele Spalten braucht, muss die Funktion nochmal verbessert werden.
Jetzt war ich so tief in meinen Hirnwindungen das ich das total überlesen haben, die Sache mit dem Z dranhängen hatte ich auch versucht, aber ich habe anscheinend nicht den richtigen Weg genommen, schaue mir das nochmal genauer an. Dir natürlich auch Danke für die Antwort.

LG
Lizzy
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Excel,Spaltenkonvertierung, Übergang zu nächstem Buchstaben

  Alt 8. Sep 2015, 16:13
Es hat mir keine Ruhe gelassen, deshalb noch 'ne kürzere Variant
Delphi-Quellcode:
program ExcelSpalten;

function MS_EXCEL_ConvertColumn(AColumn: Integer): String;
begin
  if (AColumn < 1) or (AColumn > 16384) then begin
    Result := Format('ungültige Spaltenposition (%d)',[AColumn]);
  end else while AColumn > 0 do begin
    if AColumn mod 26 = 0 then begin
      Result := 'Z' + Result;
      AColumn := AColumn - 1;
    end else begin
      Result := Chr((AColumn mod 26) + 64) + Result;
    end;
    AColumn := AColumn div 26;
  end;
end;

var
        i : Integer;
begin
  // Spaltenbezeichnungen können von 1 -> A bis 16384 -> XFD vergeben werden.
  for i := 0 to 16385 do WriteLn(MS_EXCEL_ConvertColumn(i));
end.
  Mit Zitat antworten Zitat
Khanysha

Registriert seit: 11. Jun 2015
Ort: Dunkeldeutschland
23 Beiträge
 
Delphi 7 Professional
 
#4

AW: Excel,Spaltenkonvertierung, Übergang zu nächstem Buchstaben

  Alt 9. Sep 2015, 06:54
Es hat mir keine Ruhe gelassen, deshalb noch 'ne kürzere Variant
Delphi-Quellcode:
program ExcelSpalten;

function MS_EXCEL_ConvertColumn(AColumn: Integer): String;
begin
  if (AColumn < 1) or (AColumn > 16384) then begin
    Result := Format('ungültige Spaltenposition (%d)',[AColumn]);
  end else while AColumn > 0 do begin
    if AColumn mod 26 = 0 then begin
      Result := 'Z' + Result;
      AColumn := AColumn - 1;
    end else begin
      Result := Chr((AColumn mod 26) + 64) + Result;
    end;
    AColumn := AColumn div 26;
  end;
end;

var
        i : Integer;
begin
  // Spaltenbezeichnungen können von 1 -> A bis 16384 -> XFD vergeben werden.
  for i := 0 to 16385 do WriteLn(MS_EXCEL_ConvertColumn(i));
end.
So in dieser Art hab ich es nun auch Habe gestern noch den Fall von Negativzahlen und MaxSpalten abgefangen, ich habe zwar keine Ahnung wer so eine breite Tabelle hat aber man weiß ja nie. Darum mache ich ja die Unittests, um auf Grenzen und Fehlerfälle zu prüfen ̶ ̶̶m̶̶u̶̶s̶̶s̶̶ ̶̶s̶̶t̶̶a̶̶t̶̶t̶̶ ̶̶d̶̶e̶̶m̶̶ ̶̶o̶̶r̶̶ ̶̶n̶̶i̶̶c̶̶h̶̶t̶̶ ̶̶e̶̶i̶̶n̶̶ ̶̶u̶̶n̶̶d̶̶ ̶̶r̶̶e̶̶i̶̶n̶̶?̶̶ ̶̶w̶̶e̶̶i̶̶l̶̶ ̶̶i̶̶n̶̶ ̶̶d̶̶e̶̶i̶̶n̶̶e̶̶m̶̶ ̶̶f̶̶a̶̶l̶̶l̶̶ ̶̶k̶̶a̶̶n̶̶n̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶d̶̶o̶̶c̶̶h̶̶ ̶̶n̶̶e̶̶g̶̶a̶̶t̶̶i̶̶v̶̶e̶̶ ̶̶z̶̶a̶̶h̶̶l̶̶e̶̶n̶̶ ̶̶e̶̶i̶̶n̶̶t̶̶r̶̶a̶̶g̶̶e̶̶n̶̶ ̶̶o̶̶d̶̶e̶̶r̶̶?̶̶ ̶̶d̶̶3̶̶e̶̶n̶̶k̶̶e̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶d̶̶a̶̶ ̶̶n̶̶u̶̶n̶̶ ̶̶i̶̶n̶̶ ̶̶d̶̶i̶̶e̶̶ ̶̶f̶̶a̶̶l̶̶s̶̶c̶̶h̶̶e̶̶ ̶̶r̶̶i̶̶c̶̶h̶̶t̶̶u̶̶n̶̶g̶̶,̶̶ ̶̶w̶̶o̶̶r̶̶t̶̶w̶̶ö̶̶r̶̶t̶̶l̶̶i̶̶c̶̶h̶̶?̶


Vergiss das mit dem Und... hatte noch keinen Kaffee und habe die nächste Zeile beim 3.Mal erst realisiert.
LG
Lizzy

Geändert von Khanysha ( 9. Sep 2015 um 06:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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