Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Spaltennummer nach Excel-Spaltenstring umwandeln. (https://www.delphipraxis.net/181883-spaltennummer-nach-excel-spaltenstring-umwandeln.html)

bernau 15. Sep 2014 08:34

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.

-=ZGD=- 15. Sep 2014 08:48

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:
Zahl < 26
immer den entsprechenden Buchstaben und die Differenz zu 26 zurückgibt. Mit der Differnz dann wieder in die Funktion, usw..

baumina 15. Sep 2014 08:53

AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
 
Mit der hier beschriebenen Funktion klappt das : http://www.computerwissen.de/office/...umwandeln.html

Jumpy 15. Sep 2014 09:54

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))

Dejan Vu 15. Sep 2014 11:34

AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
 
Delphi-Quellcode:
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;
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.

Jumpy 15. Sep 2014 12:18

AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
 
Wobei es, wenn ich mich gerade nicht verdenke, glaub ich heißen müsste:

Delphi-Quellcode:
result := chr(65+nummer mod 26) + result;
und man muss an den Grenzfällen aufpassen, z.B. n=26.
Das geht dann in die Hose.

DeddyH 15. Sep 2014 12:23

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.

baumina 15. Sep 2014 12:25

AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
 
Zitat:

Zitat von Dejan Vu (Beitrag 1272612)
Delphi-Quellcode:
Var
  result : string;

Begin
  return result;
end;

Bist du sicher dass das Delphi ist :gruebel:

DeddyH 15. Sep 2014 12:33

AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
 
Ich denke, es ging ihm eher um die Vorgehensweise als um funktionierenden Out-of-the-box-Code.

-=ZGD=- 15. Sep 2014 12:34

AW: Spaltennummer nach Excel-Spaltenstring umwandeln.
 
Zitat:

Zitat von baumina (Beitrag 1272618)
Zitat:

Zitat von Dejan Vu (Beitrag 1272612)
Delphi-Quellcode:
Var
  result : string;

Begin
  return result;
end;

Bist du sicher dass das Delphi ist :gruebel:

Da sind einige Syntax-Fehler, tut aber nichts zur Sache.

Das Problem mit direkt durch 26 teilbar muss man mit einem
Code:
n div 26
abfangen.
Da weiß man dann, wie viele Stellen mindestens mit 'A' belegt werden sollten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz