Středa únor 25, 2009
PHP funkce převádějící čísla na excelovské názvy sloupců
· rubrika Clanky · kategorie Programování
Nedávno jsem programoval export dat z databáze do formátu xlsx (MS Excel), kde jsem využil projektu "PHPExcel":http://www.codeplex.com/PHPExcel/. Jak asi víte, při základním nastavení jsou v Excelu jednotlivé sloupce označeny písmeny např. AC. Využívá se písmen A-Z, kde A odpovída číslu 1, B číslu 2 atd. Při exportu dat jsem tak potřeboval dle počtu sloupců v tabulce vytvořit příslušný počet "excelovských názvů" sloupců.Po chvilce zamyšlení mne napadlo převést si tento problém do matematiky, kde by se v základu dalo využít způsobu převodu dekadického čísla do jakékoliv jiné číselné soustavy. Stačí si představit písmena A-Z jako čísla 0-25 a k číslu následně přičíst 65 aby jsme dostali odpovídající číselnou hodnotu znaku v ascii tabulce. Toto ovšem nemůžeme použít, nedostali by jsme to co přesně chceme. Po sloupci s označením Z následuje AA, po AZ následuje BA atd., ale pouhým převodem do jiné soustavy dostaneme něco podobného:
Array ( [0] => 90 ) Z Array ( [0] => 66 [1] => 66 ) BBZ tohoto důvodu je třeba funkci pro převod upravit. Výslednou funkci i s testovacím výpisem naleznete zde:
Zdrojový kód:
- <?php
- /* funkce prevadejici cisla 1...n na nazvy sloupcu v excelu A,B,C,...AA,AB,AC,....AAA,AAB,AAC,.... */
- function getExcelColumnsNames($column) {
- //cisla mensi 26 muzeme rovnou vratit
- if ($column>=26){
- //delime dekadicke cislo 26 dokud neziskame vsechny zbytky po deleni
- while (ceil($column/26)!= 0){
- if (($column % 26)+64 != 64){ //
- $num[] = ($column % 26)+64;
- $column = floor($column/26);
- }else{
- unset($num);
- break;
- }
- }
- }else{
- $num[] = $column+65;
- }
- return $num;
- }
- // TEST funkce
- // vypis 720 sloupcu
- for ($j=0; $j<=720;$j++ ) {
- $array = getExcelColumnsNames($j);
- for ($k=count($array); $k>=0;$k--) {
- echo chr($array[$k]);
- }
- }
- ?>
16:09
—
Zobrazeno: 448x
—
Stálý odkaz
Komentáře
Tomas napsal dne 09/21/09 v 12:05 · #
Howkey napsal dne 09/21/09 v 12:28 · #
Další komentáře:
Semestrálka z Javy - dokončeno!
PHP Funkce pro načtení jednoho řádku ze souboru