PHP ile Excel Dosya Okuma
Önceki yazımda ASP ile excel dosyasını okuma işlemini anlatmıştım. Bu yazımda ise PHP ile excel dosyasının nasıl okunacağını anlatacağım.
Öncelikle PHP için excel dosyasını okumak için bir olereader kütüphanesini class kulacağız. Class'ı sayfa sonunda yapılan örnek dosya ile birlikte indirebilirsiniz. Class dosyasını sayfamıza import etmemiz gerekmekte bir kere import etmesi için require_once fonksiyonunu kullanacağız. Classımızı import etmek işlemi yapmamız için yeterli değildir. Classı kullanacağımızdan kullanacağımız sınıfı oluşturmamız gerekmektedir. Bunu ise new classismi şeklinde yapıyoruz. Bu aşamdan sonra ise aslında yapılacak pek bir şey kalmıyor.
<?php
//Class dosyamızı çağırıyoruz.
require_once 'Excel/reader.php';
//classımızı create ediyoruz.
$data = new Spreadsheet_Excel_Reader();
//Okunacak dosyamızı tanımlıyoruz.
$data->read('excel.xls');
echo "<table border='1'>";
echo "<tr><th>SIRA NO</th><th>ADI</th><th>Soyadi</th><th>PUAN</th></tr>";
//$data->sheets[0]['numRows'] ile kaç satir oldugunu ögreniyoruz. Ve for döngüsü ile satirlar arasinda geziyoruz.
for ($row = 1; $row <= $data->sheets[0]['numRows']; $row++)
{
echo "<tr>";
//sheets[0]['cells'][$row][1] ile satir sütüna göre okuma yapiyoruz.
//sheets[sheet sira no]['okunacak veri (hücre)'][satir][sütun]
for ($col =1; $col <= $data->sheets[0]['numCols'];$col++)
echo "<td>".$data->sheets[0]['cells'][$row][$col]."</td>";
echo "</tr>";
}
echo "</table>";
?>
Yukardaki örneği incelersek Excel klasörünün içinde bulunan reader.php dosyasını require_once fonksiyonunu kullanarak çağırıyoruz ve classımızı kullanılmak üzere $data = new Spreadsheet_Excel_Reader(); ile oluşturuyoruz . Dosyamızın ismini ve yerini göstermek için $data->read(dosya adresi ve ismi) yazıyoruz. Bu işlemlerden sonra geriye kalan sadece veriyi okumak. Öncelikle kaç satırlık bir excel dosyası olduğunu öğrenmemiz gerekiyor. Bunun için kullacağımız satır ise $data->sheets[0]['numCols']'dır. burada sheets içinde bulunan sayı exceldeki kaçıncı sayfayı okuyacağımızı gösteriyor.Benim gösterdiğim örnekte birinci sayfayı kullandım. Bundan dolayı 0 yazdım. Siz ikinci sayfayı kullanacaksanız 2-1 = 1 yazmanız gerekecektir. numCols ile'de sayfada kaç satır olduğunu sorguluyoruz. Bütün veriyi almak istediğimizden for döngüsü ile en son satıra kadar gidiyoruz. For döngüsünde kullanmış olduğum $j değişkeni 1den başlamıştır. Bunun sebebi ise 0'da genellikle başlıklar bulunmaktadır AD,soyad tarzı. Siz isterseniz 0 yazarak ilk satırıda gösterebilirsiniz. Satırlar arasında gezme işlemide anlatıldığına göre geriye sadece hücreleri okumaktır. Bunu okumak için ise $data->sheets[0]['cells'][$j+1][1] kullanırıyoruz. sheets ile yine sayfamızın sırasını, ikinci parametrede hücre okunacağından cells, üçüncü parametrede satır numarası, dördüncü parametrede ise sütun numarasını yazıyoruz.


Örnek uygulama dosyası
06 Kasım 2009, 09:56
Gayet güzel bir uygulama olmuş. Çok işimize yarayabilir. Eline sağlık.
23 Aralık 2009, 15:59
yenile ihtiyacım oldu ve kullandım, teşekkürler
26 Aralık 2009, 15:53
satır sayısı 4 te kalıyor, nasıl arttırabiliriz?
05 Ocak 2010, 08:47
satır sayısı 4′te kalmaması gerekiyor. Sütun sayısı olabilir mi? Sütun sayısı 4′ten fazla yapmak için
kısmını çoğaltman gerekiyor.
26 Ocak 2010, 10:09
Çalmışsın ben yaptım diye yazıyosun ayıp değil mi?
Yorumları türkçeye çevirince sen mi yapmış oluyosun
27 Ocak 2010, 14:37
Çeviri yaptığım sitenin adresini verebilir misin acaba?
09 Mart 2010, 11:53
numCols satırları değil sütunları okuyor. :) numRows olacaktı orası. Yazı işime yaradı, teşekkürler.
09 Mart 2010, 22:49
Öncelikle hazır yazılmış olereader kütüphanesini kullandığını belirtmen iyi olacak!!
sütun sayısını okuyup o sayıda satır çeviriyosun
Ayrıca satır sayısındada problemin var 0. satır diye birşey yok 1den başlıyor satırdolayısıyla for da $j=2 den başlayıp
şeklinde yazdırmalısın
veri olmayan her hücre için Notice dönecek her halükarda
11 Mart 2010, 21:58
Uyarılar için ve ekleme için teşekkürler.
06 Temmuz 2010, 10:31
Kardeş bu şekilde yazdırma degilde excel içindeki veri aratma yoluyla nasıl yapabiliriz yani bir sorgulama nasıl ekleyebiliriz onunda bir örnegini verebilirmisin.. tşkler…
18 Temmuz 2010, 00:13
eklediğiniz örnek dosyayı sunucuya yüklediğimde çalışmıyor. Local de sorun yok. sunucuda neden çalışmaz acaba bilgi verebilirsiniz?
08 Ağustos 2010, 20:44
Vermiş olduğu hatayı söyleyebilirseniz yardımcı olabilirim. Yetkiden dolayı sorun çıkıyor veya özelliklerden birisinin kapalı olmasından dolayı hata veriyor olabilir.
25 Ağustos 2010, 23:35
Öncelikle teşekkür ederim.
Sunucuda çalıştırmayı denediğimde herhangi bir hata kodu vermiyor ama hiç bir şeyde yapmıyor.
01 Aralık 2010, 08:57
Boşluk oşan hücrelerde hata veriyor nasıl çözebiliriz. Mesala örnek listedeki bir kişinin puanı olmasa hata veriyor.
20 Ocak 2011, 16:09
ya arkadas biri guzel bir sey yapinca neden milletin haset katsayisi yükselir.. sen yap madem ceviriyse senin yaptigini okuyalim.. ayip oluyo ama.. oturmus emek vermis bize aktarmis.. çakallıgın luzumu yok
03 Mart 2011, 13:23
merhabalar
PHP ile Excel Dosya Okuma dökümanları yayınlandığınız için teşekkür ederim ama localde çalıştırdığımda şöyle bir hata ile karşılaşıyorum
Deprecated: Assigning the return value of new by reference is deprecated in C:\wamp\www\excel\Excel\reader.php on line 124
Notice: Undefined offset: 2 in C:\wamp\www\excel\ExcelRead.php on line 34
Notice: Undefined offset: 3 in C:\wamp\www\excel\ExcelRead.php on line 34
Notice: Undefined offset: 4 in C:\wamp\www\excel\ExcelRead.php on line 34
ve hatalar devam ediyordu
ben kodu şu şekilde değiştirdim
read(‘excel.xls’);
echo “”;
for ($row = 1; $row sheets[0]['numRows']; $row++)
{
echo “”;
for ($col =1; $col sheets[0]['numCols'];$col++)
echo “”.$data->sheets[0]['cells'][$row][$col].”";
echo “”;
}
echo “”;
?>
hatalar düzeldi ama şuanda şöyle hata vermeye başladı
Notice: Undefined variable: formatstr in C:\wamp\www\excel\Excel\reader.php on line 410
yardım edebilirmisiniz
teşekkürler
02 Eylül 2011, 14:23
hazır bir excell şablonu içine veriyazdırmak istersem nasıl yaparım. yardımcı olabilicek varmı acaba.
06 Eylül 2011, 09:41
Excel export almak mı istiyorsunuz?
14 Ekim 2011, 13:38
Merhaba
Bende Bu Sınıfı Kullanıyorum Ancak Excel Dosyasındaki Veriyi Okumaya Çalışınca Tarhi Bölümlerinde Tarihi Almıyor.
12.09.2011 20:08:59 Mesela Bunu 40798.839571759 Bu Şekilde Okuyor.
Yardımını Bekliyorum
18 Ekim 2011, 01:32
Anladığım kadarıyla bu kütüphane tarih değerlerini OADate(OLE Automation Date) olarak almakta. Bunu convert etmen gerekecek. OADate nedir öncelikle onu açıklayayım. OADate bir double sayıdır ve tamsayı kısmı bu tarihden günümüze kadar geçen günü, ondalıklı kısmı ise saati ifade etmektedir. Başlangıç tarihi olarak 30.12.1899 kabul edilir. OADate verisini DateTime verisine convert etmek için yapman gereken OADate değerini yani 40798.839571759 değerini 1000*60*60*24 ile çarpmak ve 30.12.1899 tarihine milisaniye olarak eklemen gerekecek. Şuan test etmek imkanım yok ama muhtemelen şu kod işini görecektir;
$adate="1899.12.30"; $duration=1000*60*60*24*40798.839571759; $dateinsec=strtotime($adate); $newdate=$dateinsec+$duration; echo date('D M Y H:i:s',$newdate);dediğim gibi kodu test etmedim. Muhtemelen bunun için php’de datetime fonksiyonu vardır ama araştırdığım kadarıyla göremedim. Umarım mantığını anlatabilmişimdir.
22 Kasım 2011, 00:03
mrb excel reader kütüphanesi kütüphanesi kullanıyorum localde sorun yok yanlız serverda bu şekilde bir hata alıyorum… bunu nasıl çözebilirim
Warning: require_once(OLERead.inc) [function.require-once]: failed to open stream: No such file or directory in /reader.php on line 31
Fatal error: require_once() [function.require]: Failed opening required ‘OLERead.inc’ (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in reader.php on line 31
22 Kasım 2011, 08:07
Merhaba, OLERead.inc dosyasını bulamadığını söylüyor. Dosyanın adresinin doğru olduğunu teyit edebilir misin?
22 Kasım 2011, 14:40
cevap için teşekkürler öncelikle Excel klösürünün altında OLERead.inc dosyası var. localhostta çalışıyor…
22 Kasım 2011, 15:40
reader.php dosyası sayfada verilen örnekteki reader.php ile aynı mı? 31. satırda bu hatayı vermesi mümkün değil. 31. Satırda aşağıdaki kod yer almakta:
define('Spreadsheet_Excel_Reader_Type_LABEL', 0x204);24 Kasım 2011, 22:20
benmim 31. satırda şu var require_once ‘OLERead.inc’; mail adresinize dosyaları yollayabilrim. sağolun ilginize
25 Kasım 2011, 17:13
require_once ‘OLERead.inc’ satırına kadar olan kodları silip deneyebilir misin?