Excel to PHP
Se mai întâmplă uneori să avem nevoia de a prelucra nişte date pe care le avem ţinute în fişiere excel. Dacă sunt câteva înregistrări e totul bine şi frumos, însă atunci când sunt la un loc câteva sute de înregistrări trebuie găsită o variantă mai uşoară pentru preluarea şi prelucrarea lor.
Să presupunem că avem următoarele înregistrări în fişierul nostru excel:
Datele reprezintă nişte cărţi, coloanele însemnând: Titlu, Autor, Pagini, Editură şi Preţ.
Metoda pe care vă voi prezenta în cele ce urmează foloseşte extensia de care v-am mai vorbit acum ceva vreme, DOM. După cum spuneam şi atunci, DOM prelucrează fişiere XML. Aşadar primul pas pe care trebuie să-l facem este de a salva fişierul excel ca „XML Spreadsheet”.
Fişierul în cauză conţine foarte multe taguri, însă partea care ne interesează pe noi este următoarea:
|
Enigma Otiliei | George Calinescu | 401 | Eminescu | 20.440000000000001 | |
La Tiganci | Mircea Eliade | 188 | Tana | 9 | |
Jocul Ielelor | Camil Petrescu | 384 | Gramar | 15 | 3 11 8 False False
False False
False False
Datele noastre sunt aflate în interiorul tagurilor „Worksheet”. În funcţie de câte sheet-uri avem în documentul excel, atâtea taguri worksheet va conţine şi fişierul nostru xml. În cadrul fiecărui Worksheet avem tagul „Table” cu ale lui „Row” (linie) şi „Cell” (coloană). În funcţie de câte linii aveam completate în document, tot atâtea taguri „Row” vom avea şi în interiorul tagului „Table”. Valorile fiecărei coloane sunt stocate în interiorul tagului „Data”.
Ok, să ne întoarcem acum la fişierul php. Pentru început declarăm array-ul în care stocăm înregistrările şi declarăm o funcţie pentru adăugarea lor mai uşoară în acest tablou.
$titlu, 'autor' => $autor, 'pagini' => $pagini, 'editura' => $editura, 'pret' => $pret ); } ?>
Următorul pas este citirea documentului nostru şi a tagurilor (liniile tabelului) „Row”.
load( 'Book1.xml' ); $rows = $xml->getElementsByTagName( 'Row' ); ?>
După ce am citit toate liniile tabelului, pentru fiecare în parte căutăm coloanele (tagurile „Cell”). În acest moment trebuie să ne dăm seama în care coloană ne aflăm. Tagul „Cell” are un atribut „ss:Index„ care ne indică poziţia în cazul în care sunt coloane goale pe linia curentă.
getElementsByTagName( 'Cell' );
foreach ( $cells as $cell )
{
$ind = $cell->getAttribute( 'Index' );
if ( $ind != null ) $index = $ind;
if ( $index == 1 ) $titlu = $cell->nodeValue;
if ( $index == 2 ) $autor = $cell->nodeValue;
if ( $index == 3 ) $pagini = $cell->nodeValue;
if ( $index == 4 ) $editura = $cell->nodeValue;
if ( $index == 5 ) $pret = $cell->nodeValue;
$index += 1;
}
adauga_carte( $titlu, $autor, $pagini, $editura, $pret );
}
$first_row = false;
}
?>
În acest moment array-ul nostru conţine toate înregistrările din fişierul sursă. Dacă dorim să-l vizualizăm pe ecran pentru verificare, putem pur şi simplu să-l afişăm sub formă de tabel stil excel:
'; foreach ( $data as $row ) { echo ' titlu: autor: pagini: editura: pret: '; } echo ' '; ?> ' . $row['titlu'] . ' ' . $row['autor'] . ' ' . $row['pagini'] . ' ' . $row['editura'] . ' ' . $row['pret'] . '
Dacă totul este în regulă, îl inserăm în baza de date:
Cam asta este procedura pe care eu o folosesc atunci când trebuie să lucrez cu fişierele excel. Este un procedeu de bază realizat pentru un caz particular. Evident se poate îmbunătăţi considerabil, însă nu acesta era scopul exemplului.
