van kolomnummer naar excel kolomnaam
ik zoek een php functie om een kolomnummer om te zetten naar de Excel-kolomnaam,
dus
13 = M
26 = Z
27 = AA
60 = BH
70 = BR
iemand een idee? heb wel op internet wat gevonden maar kom er nog niet helemaal uit.
thanx
Gewijzigd op 27/03/2012 12:39:59 door Hank Noseman
Het zal wel iets recursiefs moeten zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function getColumnLetter($colNumber)
{
$letter = '';
$number = $colNumber;
$x = ceil($number/26)-1;
if ($x > 0)
{
$y = calcLetter($x);
}
$z = calcLetter($number - $x*26);
return $y.$z;
}
Code (php)
1
2
3
4
5
6
2
3
4
5
6
function calcLetter($colNumber)
{
$arrLetters = range('A','Z');
return $arrLetters[$colNumber-1];
}
Gewijzigd op 27/03/2012 12:50:59 door Hank Noseman
Hij kan vast korter!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
class calculator
{
public function calculate( $iNumber )
{
$beginning = 'foo';
$letters = range( 'a', 'z' );
$aRange = array_merge((array)$beginning, (array)$letters);
if( $iNumber > 26 ){
$eersteletter = floor($iNumber / 26);
$letter = $iNumber - ($eersteletter * 26);
if($letter == 0){ $letter = 26; $eersteletter = $eersteletter-1;}
return $aRange[$eersteletter] . $aRange[ $letter ];
}
return $aRange[$iNumber];
}
}
$oObj = new calculator;
//echo $oObj->calculate( 60 );
echo $oObj->calculate( 60 );
?>
class calculator
{
public function calculate( $iNumber )
{
$beginning = 'foo';
$letters = range( 'a', 'z' );
$aRange = array_merge((array)$beginning, (array)$letters);
if( $iNumber > 26 ){
$eersteletter = floor($iNumber / 26);
$letter = $iNumber - ($eersteletter * 26);
if($letter == 0){ $letter = 26; $eersteletter = $eersteletter-1;}
return $aRange[$eersteletter] . $aRange[ $letter ];
}
return $aRange[$iNumber];
}
}
$oObj = new calculator;
//echo $oObj->calculate( 60 );
echo $oObj->calculate( 60 );
?>
Dan werkt mijne tot 702 :P oftewel ZZ
http://php.net/manual/en/function.base-convert.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
/**
* Converts an integer into the alphabet base (A-Z).
*
* @param int $n This is the number to convert.
* @return string The converted number.
* @author Theriault
*
*/
function num2alpha($n) {
$r = '';
for ($i = 1; $n >= 0 && $i < 10; $i++) {
$r = chr(0x41 + ($n % pow(26, $i) / pow(26, $i - 1))) . $r;
$n -= pow(26, $i);
}
return $r;
}
?>
/**
* Converts an integer into the alphabet base (A-Z).
*
* @param int $n This is the number to convert.
* @return string The converted number.
* @author Theriault
*
*/
function num2alpha($n) {
$r = '';
for ($i = 1; $n >= 0 && $i < 10; $i++) {
$r = chr(0x41 + ($n % pow(26, $i) / pow(26, $i - 1))) . $r;
$n -= pow(26, $i);
}
return $r;
}
?>
Dit is dan wel
0 -> A
1 -> B
...
26 -> AA
Als je echt wil dat A overeen komt met 1, kan je als eerste statement van de functie dit doen:
$n--;
Leuke functies! Kris en SanThe zouden jullie ook wat toelichting willen geven over deze functies? Hoe reken je met % en wat zijn nou de functies van chr en pow? Chr returned een string, dus een letter gok ik, en pow begrijp ik niets van.
Klik op de linkjes voor uitleg.
% is de rest van een deling. zie http://nl.wikipedia.org/wiki/Rest
neem nu de deling 17/5.
bv.
17%5 geeft dus 2
chr geeft het ASCII karakter terug (string), gegeven het ASCII-nummer (int)
pow() is ... tot de macht.
vijf tot de derde macht is dus
pow(5, 3)
probeer dit maar eens om macht te verheffen, dan zie je dat het fout gaat: 5^3. ^ is een xor operator en vergelijkt de binaire waarden. wij kregen dat fout aangeleerd op school, was hilarisch toen we erachter kwamen wat er fout was