MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

PHP ile Excel ve Word gibi programlara baglanmak Yazar: Serkan Tarih: 01/03/02

Problem : ASP'de oldugu gibi COM nesneleri kullanarak Microsoft Excel,Word gibi programlarin avantajlarindan yararlanmak istiyorsunuz.

Cozum: PHP4 ile beraber ASP'de oldugu gibi onceden hazirlanmis COM objelerini programlarimiz icinde argumentler yardimiyla kullanabiliyoruz.

Bir ornek vermek gerekirse:

> <?php
> $word = new COM("word.application")
> or die("Word baslatilamiyor");
> print "Word uygulamasi basarili sekilde yuklendi,Bu bilgisayardaki word versiyonu {$word->Version}n";

> $word->visible = 0;
> $word->Documents->Add();
> $word->Selection->TypeText("Test yapiliyor,Bu bir test mesajidir... 1,2,3");
> $Documents[1]->SaveAs("ornek_dosya.doc");
> $word->Quit();
> ?>

Tartisma : Cok uzun bir sure ASP'nin programcilara verdigi bu cok guclu ozellik ile cok fazla programlama bilmeden guclu web uygulamalarinin yaratilmasi saglandi.Bu sekilde C,C++ veya Visual Basic ile uygulamalar yazip bunlari ASP arayuzu ile web ortamina aktarmak mumkun oluyordu.Simdi PHP de bu ozelligi desteklemektedir.

Aslinda ASP kullanmak icin hic bir neden yoktur.Birazdan sizlere durumun ne boyutta oldugunu gosterecegiz ve karari size birakacagiz.PHP ile gelen kolayliklar simdiye kadar hic bir dilde olmadigi kadar gelismistir.

Simdi de biraz daha gelismis bir uygulama yapalim ve ayni kodun birde ASP deki yazilimina bakalim.

Bu ornegimiz de Excel ve Mssql programlarini kullanarak bir uygulama yaratacagiz.Anlatimda kolaylik olmasi acisinda veritabani modulunu(class veya sinif olarak tabir ediliyor.) uygulamaya "require ()" komutunu kullanarak eklyecegim.Boylece cok fazla karisikliga yol acmadan anlatmak istedigimizi anlatmis olacagiz.

Zannedersem bir problem olmadan anlayacaksiniz...Bu sinifi veya dahja gelismis veritabani siniflarini internetten kolayca bulabilirsiniz.Sonucta konumuz COM objelerini kullanarak Excel,Word gibi uygulamalara baglanmak.

Kodlarimizi yazmaya baslayalim,

> <?php
> require("DB.php");
> $excel_baglantisi = new COM("excel.application");
> $excel_baglantisi->Visible = false;
> $CalismaKitabi = $excel_baglantisi->workbooks->add();
> $CalismaKitabi->Cells(1,1)->value = "Isim";
> $CalismaKitabi->Cells(1,2)->value = "Ucret";
> $CalismaKitabi->Cells(1,3)->value = "Calisma Suresi";

> $dbh = new DB; //Burada mssql veritabanina baglaniyoruz.
> $dbh->connect("mssql://kullaniciadim:sifrem@localhost/calisanraporlari");
> $sth = $dbh->query("SELECT * FROM calisanisimleri WHERE ucret='ucret'");

> $idx = 2;
> while ($satir = $dbh->fetchRow($sth, DB_GETMODE_ASSOC)) {
> $CalismaKitabi->Cells(idx, 1)->value = $satir["isim"];
> $CalismaKitabi->Cells(idx, 2)->value = $satir["Ucret"];
> $CalismaKitabi->Cells(idx, 3)->value = $satir["CS"];//Calisma Suresi CS
> }

> $dbh->disconnect();
> $CalismaKitabi->SaveAs("cal_raporlari-$ucret.xls");
> $excel_baglantisi->quit();
> ?>

Tekrar ediyorum burada "DB.php" dosyasi programimiza en basta goreceginiz gibi "require()" komutuyla birlestirildi.Bu class dosyasini uygulamanizi kayit ettiginiz klasore yerlestirmeniz halinde uygulam problemsiz caliscaktir. Veya hangi veritabani class'ini kullaniyrosaniz onu ekleyin.Sonucta bu tamamen size kalmis.

Evet buraya kadar herhalde anlasilmayan bir sey yok.Simdide ornek olmasi ve size fikir vermesi acisindan bu uygulamanin ASP versiyonunu yazalim.

> <%
> Dim excel_baglantisi, calisma_kitabi, DosyaAdi 'XLS dosyasi ile ilgili ayrintilar
> Dim dbh, sth, stmt 'Veritabani ile ilgili
> Dim i, x 'Dongulerle ilgili
> Dim Ucret 'Kullanicin girecegi girdi degiskeni

> set ucret = request.queryString("ucret")

> set excel_baglantisi = server.createObject("excel.application") 'COM Nesnesi
> excel_baglantisi.visible = False
> excel_baglantisi.workbooks.Add
> set calisma_kitabi = excel_baglantisi.Worksheets(1)
> 'VERITABANI BAGLANTISINI BASLAT VE VERIYI EKLE

> set dbh = server.createObject("ADODB.Connection")
> dbh.Open "DSN= calisanraporlari;uid=kullaniciadim;pwd=sifrem"
> set stmt = "SELECT * FROM calisanisimleri WHERE ucret='"
> stmt = stmt & Ucret & "'"

> set x=2
> For i=0 to sth.eof

> Worksheet.Cells(x,1) = sth(i).isim
> Worksheet.Cells(x,2) = sth(i).ucret
> Worksheet.Cells(x++,3) = sth(i).CS
> sth.movenext
> next

> dbh.close

> calisma_kitabi.SaveAs "cal_raporlari-" & Ucret & ".xls"
> excel_baglantisi.quit

> set calisma_kitabi = Nothing
> set excel_baglantisi = Nothing
> %>

> Karar Sizin :)

> Bu konu hakkindaki butun gorus ve sorularinizi asagidaki mail adresime gonderebilirsiniz.

> Saglicakla kalin,

> Serkan Hadi Ceylani
> serkan@turk-php.com

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>