van kolomnummer naar excel kolomnaam

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hank Noseman

Hank Noseman

27/03/2012 10:51:19
Quote Anchor link
Hey hallo,

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
 
PHP hulp

PHP hulp

22/11/2024 10:05:47
 
Erik Rijk

Erik Rijk

27/03/2012 11:24:24
Quote Anchor link
Ik vond de vraag leuk dus wilde wel wat maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

    class calculator
    {
        public function calculate( $iNumber )
        {

            $aRange = range( 'a', 'z' );
            return $aRange[$iNumber -1 ];
        }
    }

    
    $oObj = new calculator;
    echo $oObj->calculate( 1 );
    echo $oObj->calculate( 6 );
    echo $oObj->calculate( 26 );

?>
 
Hank Noseman

Hank Noseman

27/03/2012 11:53:26
Quote Anchor link
Ik heb nu de volgende functies gemaakt, echter werkt dit maar t/m kolom ZZ.

Het zal wel iets recursiefs moeten zijn.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
PHP script in nieuw venster Selecteer het PHP script
1
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
 
Gerhard l

gerhard l

27/03/2012 12:27:38
Quote Anchor link
Weetje zeker dat 60 BR is? Bij mij komt er BH uit ;)
Hij kan vast korter!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 );
?>
 
Hank Noseman

Hank Noseman

27/03/2012 12:39:34
Quote Anchor link
foutje, klopt inderdaad! Ik heb het aangepast!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
60 = BH

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
70 = BR
Gewijzigd op 27/03/2012 12:40:28 door Hank Noseman
 
Gerhard l

gerhard l

27/03/2012 13:01:34
Quote Anchor link
Dan werkt mijne tot 702 :P oftewel ZZ
 
Kris Peeters

Kris Peeters

27/03/2012 14:17:41
Quote Anchor link
Op php.net staat de oplossing, bij de comments.
http://php.net/manual/en/function.base-convert.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


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--;
 
- SanThe -

- SanThe -

27/03/2012 14:50:56
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function show($getal)
{

    if($getal > 26)
    {

        show(floor(($getal-1) / 26));
    }

    $chr = ($getal % 26) == 0 ? 26 : $getal % 26;
    echo chr($chr + 64);
}


show(702);
?>
 
Gerhard l

gerhard l

27/03/2012 15:03:23
Quote Anchor link
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.
 
- SanThe -

- SanThe -

27/03/2012 15:23:19
Quote Anchor link
Klik op de linkjes voor uitleg.
 
Kris Peeters

Kris Peeters

27/03/2012 16:39:16
Quote Anchor link
Een aantal dingen ...

% 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)
 
Jeroen VD

Jeroen VD

27/03/2012 16:41:07
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.