Verujem da je svako od developera bar jednom u svojoj karijeri imao potrebu da importuje podatke iz nekog Excel fajla. Bez obzira da li se radi o cenovniku ili listi leadova koji morate iz Excela importovati u bazu, postupak je gotovo uvek isti. Prvo što radite je export Excel fajla u običan txt fajl (csv, xml, …) a zatim parsovanje podataka (radi importa u bazu i sl.). Prilično zamoran postupak, pogotovo ako ga morate raditi često, recimo za update cenovnika i sl.
Zahvaljujući besplatnoj phpexcelreader klasi, gore opisan postupak može biti prošlost. Jednostavno, sa phpexcelreader klasom podacima u Excelu možete pristupiti direktno referencijanjem indeksa reda odnosno kolone. Što je najlepše od svega, ova klasa podržava UTF-8 encoding, tako da neće biti problema sa našim slovima. Evo kratkog primera kako to u praksi izgleda.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Excel Reader Test Page</title> </head> <body> <?php require_once 'Excel/reader.php'; //nova instanca Spreadsheet_Excel_Reader klase $data = new Spreadsheet_Excel_Reader(); // Setuj encoding na UTF-8 $data->setOutputEncoding('UTF-8'); // Citaj fajl excel.xls $data->read('excel.xls'); /* Korisni metodi: $data->sheets[0]['numRows'] - broj redova u prvom sheet-u $data->sheets[0]['numCols'] - broj kolona u prvom sheet-u $data->sheets[0]['cells'][$i][$j] - podaci iz $i-reda i $j-kolone $data->sheets[0]['cellsInfo'][$i][$j] - informacije o celiji iz $i-reda i $j-kolone za vise informacija pogledajte example.php fajl koji ide uz klasu */ //a sada, cisto primera radi, ispisi sve podatke iz excel fajla, red po red for ($i = 1; $i sheets[0]['numRows']; $i++) { for ($j = 1; $j sheets[0]['numCols']; $j++) { echo "\"".$data->sheets[0]['cells'][$i][$j]."\","; } echo "\n"; } ?> </body> </html>
OK, čita super Excel fajlove ali naša slova nikako da prikaže. Probao sam i sa UTF-8 i sa CP1250 i ništa.
Da li znaš rešenje?
Koliko se secam, kod mene su nasa slova radila. Jesi li siguran da si setovao odgovarajuci charset sa:
$data->setOutputEncoding(‘UTF-8’);
(isti charset i u html-u)