Emre Yüz


PHP ve SheetJS ile Excel Dosyalarını Ultra Hızlı Okuma

Excel ile uğraşanlar bilir kendisi başlı başına sıkıntılı bir programdır. İşte bunu bir de web'de yayınlamaya kalktığınızda işlerin ters gitmesi kaçınılmaz.

PHP ve SheetJS ile Excel Dosyalarını Ultra Hızlı Okuma

By Emre YÜZ
24.09.2018 23:21



php excel sheetjs xlsx dosyası excelden veri çekme

Projemde bir excel dosyasını işleyerek verileri web sitesi üzerinden kullanıcılara sunmam gerekti. Bunun için ilk başlarda basitçe excel dosyasını açarak okuduğumda sorunsuz bir şekilde çalıştı ama işler verilerin olduğu dosyayı okumaya geldiğinde chrome kilitlenerek yanıt vermemeye başladı. Bulduğum çözümler PHP'nin yeni sürümlerinde kullanımdan kaldırıldığı için çok fazla vakit kaybettim. En sonunda SheetJS kütüphanesi ile karşılaştım bir kaç denemeden sonra tam olarak beklentilerimi karşıladı özellikle xlsx dosyalarını desteklemesi ve 14.000 satırı saniyeler içerisinde ekrana yazdırması çok iyi. Şimdi bakalım nasıl kullanılıyor.


Öncelikle SheetJS Github sayfasından kütüphaneyi indiriyoruz. Bu kütüphanede dist klasörü içerisindeki xlsx.full.min.js dosyasını kullanacağız. Bunu sayfamıza ekliyoruz sıra geldi kodlarımızı yazmaya.

var url = "deneme.xlsx"; //Tüm dosyalarınız aynı klasördeyse dosya yolu yerine excel adını ve formatını yazmanız yeterli
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";
oReq.onload = function(e) {
	var arraybuffer = oReq.response;
	var data = new Uint8Array(arraybuffer);
	var arr = new Array();
	for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
	var bstr = arr.join("");
	var workbook = XLSX.read(bstr, {type:"binary"});
	var first_sheet_name = workbook.SheetNames[0]; //Seçilen kitaplık 0 indeksi 1.kitaplık oluyor
	var worksheet = workbook.Sheets[first_sheet_name];
	$.ajax({
		url: 'json.php', //tüm excel'i kendimize göre düzenlemek için başka bir sayfaya json formatında gönderiyoruz
		type: 'POST',
		data: { datas:XLSX.utils.sheet_to_json(worksheet,{raw:true}) },
		success: function(results){
			$(".excel").append(results); //Verileri işledikten sonra excel classlı divimize yazdırıyoruz
		}
	});
}
oReq.send();

Şimdi json.php dosyamızı oluşturarak gelen excel satırlarını kendimize göre formatlayalım. Burada diziyi ters çevirerek ön en son girilen satırları getirdik.

 if($_POST)
{
	$array = array_reverse($_POST["datas"]);
	echo '<table width="100%" border="0" cellspacing="2" cellpadding="4"><tbody>';
	$row=1;	
	foreach($array as $data)
	{
		if($row%2==0) {
			echo '<tr height="30" style="background-color:#ffffff; border-bottom:1px solid #f0f0f0;">';
		}
		else {
			echo '<tr height="30" style="border-bottom:1px solid #f0f0f0;">';
		}
		echo '<td>'.$data["SUTUNBASLIKLARI"].'</td>';
		echo '<td>'.$data["SUTUNBASLIKLARI1"].'</td>';
		echo '<td>'.$data["SUTUNBASLIKLARI2"].'</td>';
		echo '<tr>';
		$row++;
	}
}
Yukarıda özellikle sütün başlıkları kısmına dikkat etmelisiniz exceldeki sütun başlıkları ile birebir aynı olması gerekiyor aksi takdirde verileriniz tam olarak gelmez.

Son olarak tüm verileri yazdırdığımız divi sayfamıza ekliyoruz.

 <div class="excel"></div>
Notlar:

  • İlk adımdaki javascript kodlarını bir fonksiyon içerisine alarak bu fonksiyonu interval ile belli sürelerde çalıştırarak sayfa yenilemeden excelinizdeki son verileri rahatlıkla ekrana yazdırabilirsiniz.
  • Bu kütüphanenin diğer güzel bir özelliği excel dosyası açıkken bile rahatlıkla veri çekebilir.



Emre Yüz
Emre YÜZ
Multidisipliner Full-Stack Web Geliştirici/Tasarımcı, Veri
Mimarı ve Analist.

Multidisipliner Full-Stack Web Geliştirici/Tasarımcı, Veri Mimarı ve Analist.



HAKKIMDA

Emre YÜZ

Multidisipliner Full-Stack Web Geliştirici/Tasarımcı, Veri Mimarı ve Analist.

Son Yazılar

insta ❤️ feed

  • @yuzemre
  • @yuzemre
  • @yuzemre
  • @yuzemre
  • @yuzemre
  • @yuzemre

Reklam