Posted by: misterjinx on: ianuarie 25, 2009
header( ‘Location : http://www.freshcolors.ro/blog/‘ );
meet you there
Posted by: misterjinx on: ianuarie 14, 2009
Ce ziceţi de asta?
splash-ul hyperactive (originalul):
şi acum cireaşa de pe tort, un splash al unui tip pe nume stevenson:
via idevelop
Posted by: misterjinx on: noiembrie 28, 2008
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:
<Worksheet ss:Name=”Sheet1″>
<Table ss:ExpandedColumnCount=”6″ ss:ExpandedRowCount=”4″ x:FullColumns=”1″
x:FullRows=”1″ ss:DefaultRowHeight=”15″>
<Column ss:Index=”2″ ss:AutoFitWidth=”0″ ss:Width=”73.5″/>
<Column ss:AutoFitWidth=”0″ ss:Width=”102.75″/>
<Row ss:Index=”2″>
<Cell ss:Index=”2″><Data ss:Type=”String”>Enigma Otiliei</Data></Cell>
<Cell><Data ss:Type=”String”>George Calinescu</Data></Cell>
<Cell><Data ss:Type=”Number”>401</Data></Cell>
<Cell><Data ss:Type=”String”>Eminescu</Data></Cell>
<Cell><Data ss:Type=”Number”>20.440000000000001</Data></Cell>
</Row>
<Row>
<Cell ss:Index=”2″><Data ss:Type=”String”>La Tiganci</Data></Cell>
<Cell><Data ss:Type=”String”>Mircea Eliade</Data></Cell>
<Cell><Data ss:Type=”Number”>188</Data></Cell>
<Cell><Data ss:Type=”String”>Tana</Data></Cell>
<Cell><Data ss:Type=”Number”>9</Data></Cell>
</Row>
<Row>
<Cell ss:Index=”2″><Data ss:Type=”String”>Jocul Ielelor</Data></Cell>
<Cell><Data ss:Type=”String”>Camil Petrescu</Data></Cell>
<Cell><Data ss:Type=”Number”>384</Data></Cell>
<Cell><Data ss:Type=”String”>Gramar</Data></Cell>
<Cell><Data ss:Type=”Number”>15</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<PageSetup>
<Header x:Margin=”0.3″/>
<Footer x:Margin=”0.3″/>
<PageMargins x:Bottom=”0.75″ x:Left=”0.7″ x:Right=”0.7″ x:Top=”0.75″/>
</PageSetup>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>11</ActiveRow>
<ActiveCol>8</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name=”Sheet2″>
<Table ss:ExpandedColumnCount=”1″ ss:ExpandedRowCount=”1″ x:FullColumns=”1″
x:FullRows=”1″ ss:DefaultRowHeight=”15″>
</Table>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<PageSetup>
<Header x:Margin=”0.3″/>
<Footer x:Margin=”0.3″/>
<PageMargins x:Bottom=”0.75″ x:Left=”0.7″ x:Right=”0.7″ x:Top=”0.75″/>
</PageSetup>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name=”Sheet3″>
<Table ss:ExpandedColumnCount=”1″ ss:ExpandedRowCount=”1″ x:FullColumns=”1″
x:FullRows=”1″ ss:DefaultRowHeight=”15″>
</Table>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<PageSetup>
<Header x:Margin=”0.3″/>
<Footer x:Margin=”0.3″/>
<PageMargins x:Bottom=”0.75″ x:Left=”0.7″ x:Right=”0.7″ x:Top=”0.75″/>
</PageSetup>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
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.
$data = array();
function adauga_carte( $titlu, $autor, $pagini, $editura, $pret )
{
global $data;$data[] = array( ‘titlu’ => $titlu,
‘autor’ => $autor,
‘pagini’ => $pagini,
‘editura’ => $editura,
‘pret’ => $pret
);
}
Următorul pas este citirea documentului nostru şi a tagurilor (liniile tabelului) „Row”.
$dom = new DOMDocument();
$xml = $dom->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ă.
//prima linie este ignorată
$first_row = true;
foreach ( $rows as $row )
{
if ( ! $first_row )
{
$titlu = “”;
$autor = “”;
$pagini = “”;
$editura = “”;
$pret = “”;
$index = 1;$cells = $row->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:
echo ‘<table border=”1″><tr><td><b>titlu:</b></td><td><b>autor:</b></td><td><b>pagini:</b></td><td><b>editura:</b></td><td><b>pret:</b></td></tr>’;
foreach ( $data as $row )
{
echo ‘<tr><td>’ . $row['titlu'] . ‘</td><td>’ . $row['autor'] . ‘</td><td>’ . $row['pagini'] . ‘</td><td>’ . $row['editura'] . ‘</td><td>’ . $row['pret'] . ‘</td></tr>’;
}echo ‘</table>’;
Dacă totul este în regulă, îl inserăm în baza de date:
mysql_connect( “localhost”, “user”, “pass” );
mysql_select_db( “db_name” );$i = 0;
foreach ( $data as $row )
{
$inserted = mysql_query( “INSERT INTO `carti` ( titlu, autor, pagini, editura, pret )
VALUES ( ‘”.$row['titlu'].”‘, ‘”.$row['autor'].”‘, ‘”.$row['pagini'].”‘, ‘”.$row['editura'].”‘, ‘”.$row['pret'].”‘ )”
);if ( $inserted ) $i++;
}echo ‘Au fost introduse ‘ . $i . ‘ carti.’;
Cam asta este procedura pe care eu o foloses 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
Posted by: misterjinx on: noiembrie 20, 2008
Posted by: misterjinx on: noiembrie 17, 2008