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:

junij 8th, 2008 ob 12:04 dopoldne
[...] PHP - branje Excel (.xls) datoteke - Excel UTF8 branje [...]
junij 10th, 2008 ob 12:01 dopoldne
[...] PHP - branje Excel (.xls) datoteke - Excel UTF8 branje [...]
julij 28th, 2008 ob 12:06 popoldne
Dodal par malenkostnih popravkov in dodatni primer za branje in pretvorbo datuma.