Stau cuminte si verific trei rapoarte care trebuie predate la sfarsitul zilei. Proiect mare .. documente multe. Seful se apropie tiptil si ma intreaba daca am timp sa termin pana la sfarsitul saptamanii o noua serie de fise cu datele de mentenanta pentru echipament. Format similar .. toate informatiile exista deja intr-o baza de date MS-SQL. Problema lui [acum si a mea] este formatul XLS in care vor fi trimise clientului. Si nu's putine, doar 2532 fisiere. Cate unul pentru fiecare echipament livrat.
Am deja instalat un Apache, cu suport PHP, pe platforma Windows. Norocul meu este ca PHP-ul are o extensie numita COM (Component Object Model). Arhitectura se bazeaza pe refolosirea componentelor software, iar tehnologia este dezvoltata de Microsoft, fiind destul de raspandita. Toate componentele MS-Office, AutoCAD-ul chiar si Adobe Photoshop fac uz de ea. Din pacate doar versiunea Windows a PHP-ului are extensia asta.
Gata cu strategia. Deschid Notepad-ul si ma apuc de treaba .. "report.php"
<?php // create object instance $excel = new COM("Excel.Application") or die("Excel could not be started"); // pop open the Excel application $excel->Visible = 1; // turn off alerts $excel->DisplayAlerts = 0; // add a workbook $excel->Workbooks->Add(); // save $excel->Workbooks[1]->SaveAs("C:\\CMMS.xls"); // close the application $excel->Quit(); $excel = null; ?>
Cand chem in browser fisierul "report.php" se intampla foarte repede urmatoarele:
- se deschide o fereastra Microsoft Excel.
- este incarcat un fisier nou, care este denumit "CMMS.XLS"
- fereastra Excel se inchide imediat dupa ce fisierul este salvat.
Extensia COM a PHP-ului asigura accesul si manipularea obiectelor COM deja inregistrate in laptop-ul la care lucrez. Unul din aceste obiecte este "Excel Application", inregistrat la instalarea suitei Office. Obiectul are un numar de metode si proprietati care pot fi accesate si folosite de oricine (atata vreme cat "oricine" asta are drept de acces la ele).
Primul pas in folosirea obiectelor COM in scripturi este instantierea clasei COM. Argumentul transmis constructorului clasei este numele componentei folosite. In cazul de fata, pentru ca am nevoie de MS-Excel, am folosit obiectul Excel.Application.
In mod implicit, PHP-ul considera ca obiectul este accesibil local. In cazul in care este necesara conectarea la obiecte ruland in alte computere, al doilea argument transmis constructorului (optional) este numele serverului. In acest caz, in php.ini trebuie sa existe linia "com.allow_dcom = true", ori se poate folosi functia ini_set().
Obiectul Excel.Application are un numar relativ mare de metode si proprietati. Le pot folosi pentru a crea fisiere, pot adauga tab-uri, sau adauga continut ori formule in celulele in care am nevoie. Nu in ultimul rand, pot sa formatez textul si sa salvez rezultatele undeva.
Chiar daca testul de mai sus este extrem de simplu, Obiectul COM imi ofera un mod de a automatiza crearea celor 2532 de fisiere .. treaba care parea la inceput aproape imposibila ..
Cool nu?