PHP – branje Excel (.xls) datoteke – Excel UTF8 branje
Velikokrat se zgodi, da stranka pošljo svojo vsebino v .xls formatu. Excel je za stranko pregleden način urejanja podatkov, ponuja veliko dodatnih opcij sortiranja in filtriranja. Pa je na PHP strani tudi tako enostavno prebrati Excel, kot je stranki urejanje le-tega?
Če poznate PHPExcelReader razred potem je odgovor pritrdilen. Sicer ima nekaj problemov z branjem UTF8 podatkov ter E_STRICT, E_NOTICE napakami, vendar se tudi zato najdejo popravki (zadnja verzijo datoteke, ki vsebuje nekaj popravkov s strani mene in nekaj popravkov glede UTF-8 z različnih spletnih strani je moč najti pod datotekami spodaj).
Branje podatkov v CP1251, izpis v UTF-8:
-
// Create new instance
-
require_once 'Excel/reader.php';
-
$excelData = new Spreadsheet_Excel_Reader();
-
$excelData->setOutputEncoding('UTF-8');
-
$excelData->read('test.xls');
-
-
// Define how many rows and columns are there - we will automaticly increase rows and columns at reading
-
$excelData->sheets[0]['numRows'] = 1;
-
$excelData->sheets[0]['numCols'] = 1;
-
-
// Get data
-
for ($i = 1; $i <= $excelData->sheets[0]['numRows']; $i++) {
-
for ($j = 1; $j <= $excelData->sheets[0]['numCols']; $j++) {
-
// Add field into data array
-
$data[$i][] = $excelData->sheets[0]['cells'][$i][$j];
-
-
// If this is first row count number of columns
-
if ($i == 1) {
-
$excelData->sheets[0]['numCols']++;
-
}
-
} elseif ($i !== 1 && $j <$excelData->sheets[0]['numCols']) {
-
$data[$i][] = '';
-
}
-
}
-
-
// If the row was not empty continue with reading
-
$excelData->sheets[0]['numRows']++;
-
} else {
-
}
-
}
S tem preberemo celotno Excel datoteko. Število vrstic in stolpcev dinamično povečujemo pri branju, kjer preverjamo ali sta stolpec in vrstica prazna. Če nista prazna povečamo število le-teh.
Primer izpisa testne datoteke - s pomočjo dump funkcije:

Napredna uporaba:
Omenjeni modul oz. razred podpira tudi branje t.i. raw podatkov in tipa stolpcev. Do teh podatkov pridemo s pomočjo cellInfo ključa v tabeli (PHP array). Primer uporabe za datum:
-
if ($excelData->sheets[0]['cellsInfo'][$i][$j]['type'] == 'date') {
-
$excelData->sheets[0]['cells'][$i][$j] = date('Y-m-d', $excelData->sheets[0]['cellsInfo'][$i][$j]['raw']);
-
}
Tako dobimo iz raw podatka (551232000) pravilno formatiran datum(1987-06-21). Včasih se zgodi, da excel reader prebere datum in doda 1 dan. V tem primeru odšteje 60*60*24 (60 sekund, 60 minut, 24 ur):
-
$excelData->sheets[0]['cells'][$i][$j] = date('Y-m-d', $excelData->sheets[0]['cellsInfo'][$i][$j]['raw']-60*60*24);
Dodatne informacije:
- Kratek vodič o branju podatkov s pomočjo PHP Excel Reader razreda
- Dokumentacija PHP Excel Reader razreda
- Prezentacija o branju / pisanju Excel podatkov s pomočjo PHP-ja
Datoteke:
- PHP Excel Reader - vključuje nekaj dodatnih popravkov
- Testna datoteka test.xls
- Excel reader skripta (.inc) - prebere Excel datoteko in izpiše celotno vsebino
Podobni članki:
- PHP – Kreiranje Excel datoteke – Pisanje v Excel datoteko – PHP – xls
- PHP – pretvorba Excel datoteke v .txt datoteko – Excel to txt converter
- Preprosta skripta – kreiranje Excel datoteke iz PHP tabele/array
- PHP – Zen Cart – Easy Populate – UTF8 podpora – UTF8 support
- PHP – Kreiranje PDF datoteke – DOMPDF – TCPDF
- MySQL – date funkcije – current date, now, add date, sub date, interval
- Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
- PHP – kako ugotoviti tip datoteke (get file extension type)
- PHP – pretvori prvo črko v veliko črko – UTF8 podpora (ucfirst, ucwords, mb_convert_case)
- Zend Search Lucene – UTF8 podpora – iconv težave



June 8th, 2008 ob 12:04 am
[...] PHP - branje Excel (.xls) datoteke - Excel UTF8 branje [...]
June 10th, 2008 ob 12:01 am
[...] PHP - branje Excel (.xls) datoteke - Excel UTF8 branje [...]
July 28th, 2008 ob 12:06 pm
Dodal par malenkostnih popravkov in dodatni primer za branje in pretvorbo datuma.
March 4th, 2009 ob 9:00 pm
[...] smo že o tem kako prebrati Excel in tudi kako ustvariti Excel, v obeh primerih smo dodali podporo za UTF-8. Dodatno smo zatem [...]
May 21st, 2009 ob 9:00 am
Odlično! Še ena stvar, ki sem jo sicer sam našel, ampak me veseli, da nisem edini, ki jo uporablja in sprejema kot OK