PHP [GELÖST] Alphabet als Index

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich beschäftige mich gerade mit PHPExcel.
Mein problem ist nun, dass ich eine variable Anzahl von Spalten habe und ver $x, $y nicht die Summe der Spalten bilden kann.

Aus diesem Grund versuche ich einen Algorythmus zu schreiben, welcher mir beim Index 27 Beispielsweise die Spalte AA selectiert. Der Index 46 wäre dann die Spalte AT.

Hat hier vielleicht jemand einen Algorythmus oder eine Idee wie man dies Umrechnen könnte? Gibt es soetwas wie einen Alphabetischen Index, welcher wie im Excel mit A anfängt und bis Z läuft und dann mit AA, AB, usw. weiter macht?

Mein bisheriger Versuch ist folgender:
PHP:
function getColumnName($index = 1){
	global $alphabet;

	//Spaltenname
	$columnName = '';

	//Anzahl der Durchläufe
	$columnCount = ceil($index/count(alphabet));
	
	$i = 1;
	while($i <= $columnCount){
		//Prüfen, welcher Buchstabe benötigt wird.
		$alphabet_index = ($i < $columnCount) ? $index : $i;

		//Spaltennamen zusammensetzen
		$columnName .= $alphabet[$alphabet_index];
		$i++;
	}
	
	return $columnName;
}

Diese Funktion gibt mir aber nur folgendes zurück:
A
BB
CCC
DDDD

Das heißt, weiter als 4 Spalten kommt er nicht, wobei der Spaltenname auch falsch ist...

Ich bin für jede Hilfe Dankbar!


MFG
Papenburger
 
Zuletzt bearbeitet:
Du musst nix "umrechnen". Einfach nur mit Basis 26 und den Ziffern 'A' bis 'Z' zählen ;)

P.S. Da gibts Funktionen; du musst das Rad nicht neu erfinden, wie man mit einem 26er-Zahlensystem rechnet.
 
mach doch folgendes:

PHP:
$val = "A,B,....,X,Y,Z";
$ar[] = split( $val, "," );
$cnt = 1;

while ( $cnt !=0 ) {
   for ($i=0;$i++;$i<=25) {
        echo $ar[i];
   }
   $cnt--;
}

Sollte dir A-Z ausgeben.
$cnt kannst du erhöhen, um mehrere Spalten zu erzeugen...
geht auch andersherum, mit $cnt = x; und $cnt++;

keine Ahnung ob es mit dem vom theHacker schneller geht
 
@tobomator: OMG 8O

Nachtrag:
90 Sekunden :rtfm: ... und ich finde das
https://de2.php.net/manual/en/function.base-convert.php#96304
;)

Das wäre mehr oder weniger das, was ich gesucht hatte. Auf Basen/Potenzen bin ich Gedanklich überhaupt nicht gekommen. Aus diesem Grunde konnte ich über Google auch nichts entsprechendes Finden.

Das Problem habe ich derzeit anders gelöst. Über Umwege kann man in PHPExcel den aktuellen Spaltennamen abfragen...

Den genauen Code-Schnippsel kann ich erst morgen posten.

@theHacker: Danke für den Hinweis. Ich werd mir das mal verinnerlichen!


MFG
Papenburger
 
Für diejenigen die ebenfalls mit PHPExcel ihre Excel-Tabellen erstellen lassen, sei es für den Export von Statistiken oder sonst irgendwelche Daten.

Die aktuelle Spalten bzw. den aktuellen Spaltennamen kann man wie folgt abfragen:

PHP:
//Objekt initialisieren
$objPHPExcel = new PHPExcel();

//Aktuelles Worksheet auswählen
$activeSheet = $objPHPExcel->getActiveSheet();

//Inhalt schreiben
$cell = $activeSheet->setCellValueByColumnAndRow(0, 0, utf8_encode('TEXT'), true);

//Zellennamen abfragen
$cellName = $cell->getColumn();

1. Als erstes wird das Objekt initialisiert.
2. Dannach wird das aktuelle Worksheet gesetzt bzw. ausgewählt.
3. Mit $activeSheet ->setCellValueByColumnAndRow() wird an der angegebenen Position der Text geschrieben. 0,0 steht dabei für Spalte A, Zeile 1. Hier ist wichtig dass ihr als vierten Parameter true angibt, damit die Methode Rückgabewerte liefert.
4. $cell->getColumn(); liefert euch nun den Spaltennamen in dem ihr euch derzeit befindet.


Ich hoffe, hiermit auch einigen anderen geholfen zu haben...


Viele Grüße
Papenburger