Bir çok arkadaşımın ardarda bu konu hakkında sorular sormasının ardından faydalı olacağını düşündüğüm bir excel çıktı class yazıyor ve sizinle paylaşmak istiyorum. Türkçe karakter sorunu yaşamayacağınızı düşünüyorum bazı fonksiyonalrın ne anlama geldiği makalenin sonunda belirtilmiştir.
PHP ile Excel Çıktı Almak
PHP ile Excel Çıktı Almak
<?php
class excel(){
// Döküman Download dosya adı
public $filename=null;
// Döküman için sütun başlıkları
public $sutunlar=null;
// Döküman için Satır isimleri
public $satirlar=null;
// Döküman Başlığı
public $baslik=null;
// Hangi Dil kodlamasından Aktarılacak
public $fromencoding=’UTF-8′;
// Hangi dil kodlamasına çevrilecek
public $toencoding=’ISO8859-9′;
// Dökümanımız hangi satırdan başlayacak
public $baslangicsatir=0;
// Dökümanımız Hangi Sütundan Başlayacak
public $baslangicsutun=0;
class excel(){
// Döküman Download dosya adı
public $filename=null;
// Döküman için sütun başlıkları
public $sutunlar=null;
// Döküman için Satır isimleri
public $satirlar=null;
// Döküman Başlığı
public $baslik=null;
// Hangi Dil kodlamasından Aktarılacak
public $fromencoding=’UTF-8′;
// Hangi dil kodlamasına çevrilecek
public $toencoding=’ISO8859-9′;
// Dökümanımız hangi satırdan başlayacak
public $baslangicsatir=0;
// Dökümanımız Hangi Sütundan Başlayacak
public $baslangicsutun=0;
public function __construct(){
}
// Excel Dökümanımızın Başlangıcını Belirleyecek Fonksiyon
private function xlsBOF() {
echo pack(“ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
return;
}
// Excel Dökümanımızın Sonunu Belirleyecek Fonksiyon
private function xlsEOF() {
echo pack(“ss”, 0x0A, 0×00);
return;
}
// Excel Dökümanımıza Rakamsal ifadeleri yazacak olan fonksiyon
private function xlsWriteNumber($Row, $Col, $Value) {
echo pack(“sssss”, 0×203, 14, $Row, $Col, 0×0);
echo pack(“d”, $Value);
return;
}
// Excel Dökümanımıza Striing ifadeleri yazacak olan fonksiyon
private function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack(“ssssss”, 0×204, 8 + $L, $Row, $Col, 0×0, $L);
echo $Value;
return;
}
// Excel Dökümanımızın Başlangıcını Belirleyecek Fonksiyon
private function xlsBOF() {
echo pack(“ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
return;
}
// Excel Dökümanımızın Sonunu Belirleyecek Fonksiyon
private function xlsEOF() {
echo pack(“ss”, 0x0A, 0×00);
return;
}
// Excel Dökümanımıza Rakamsal ifadeleri yazacak olan fonksiyon
private function xlsWriteNumber($Row, $Col, $Value) {
echo pack(“sssss”, 0×203, 14, $Row, $Col, 0×0);
echo pack(“d”, $Value);
return;
}
// Excel Dökümanımıza Striing ifadeleri yazacak olan fonksiyon
private function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack(“ssssss”, 0×204, 8 + $L, $Row, $Col, 0×0, $L);
echo $Value;
return;
}
function download(){
// İndirme dosya Adı verilmemişse isim verelim
if (is_null($this->filename)){
$this->filename=substr(MD5(uniqid(rand())),0,10);
}
// dosya isminde xls uzantısını kontrol edelim
if (substr($filename,-4)!=’.xls’){
$this->filename.=’.xls’;
}
// İndirme dosya Adı verilmemişse isim verelim
if (is_null($this->filename)){
$this->filename=substr(MD5(uniqid(rand())),0,10);
}
// dosya isminde xls uzantısını kontrol edelim
if (substr($filename,-4)!=’.xls’){
$this->filename.=’.xls’;
}
// Çıktımızın Excel olarak çıktılanmasını ve Download İşleminin başlamasını sağlayalım
header(“Pragma: public”);
header(“Expires: 0″);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=$this->filename “);
header(“Content-Transfer-Encoding: binary “);
header(“Pragma: public”);
header(“Expires: 0″);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=$this->filename “);
header(“Content-Transfer-Encoding: binary “);
// Çalışma Kitabımızın Başını belirleyelim
xlsBOF();
//Başlangıç Satırını belirleyelim
$satir=$this->baslangicsatir;
//Başlangıç Sütununu belirleyelim
$sutun=$this->baslangicsutun;
xlsBOF();
//Başlangıç Satırını belirleyelim
$satir=$this->baslangicsatir;
//Başlangıç Sütununu belirleyelim
$sutun=$this->baslangicsutun;
//Eğer Varsa Başlığı Yazalım
if (!is_null($this->baslik)){
$this->xlsWriteLabel($satir,$sutun,mb_convert_encoding(stripslashes($this->baslik),$this->toencoding,$this->fromencoding);
$satir++;
}
//Eğer Varsa Sütunları Yerleştirelim
if (!is_null($this->sutunlar)){
$count=count($sutunlar)+$this->baslangicsutun;
if (!is_null($satirlar))
$sutun++;
for ($i=$sutun;$i<$count;$i++){
$this->xlsWriteLabel($satir,$i,mb_convert_encoding(stripslashes($this->sutunlar[$i]),$this->toencoding,$this->fromencoding);
}
}
// eğer Varsa Satırları Yerlşetirelim
if (!is_null($satirlar)){
$count=count($satirlar)+$this->baslangicsatir;
for ($i=$satir;$i<$count;$i++){
$this->xlsWriteLabel($i,$sutun,mb_convert_encoding(stripslashes($this->sutunlar[$i]),$this->toencoding,$this->fromencoding);
}
}
if (!is_null($this->baslik)){
$this->xlsWriteLabel($satir,$sutun,mb_convert_encoding(stripslashes($this->baslik),$this->toencoding,$this->fromencoding);
$satir++;
}
//Eğer Varsa Sütunları Yerleştirelim
if (!is_null($this->sutunlar)){
$count=count($sutunlar)+$this->baslangicsutun;
if (!is_null($satirlar))
$sutun++;
for ($i=$sutun;$i<$count;$i++){
$this->xlsWriteLabel($satir,$i,mb_convert_encoding(stripslashes($this->sutunlar[$i]),$this->toencoding,$this->fromencoding);
}
}
// eğer Varsa Satırları Yerlşetirelim
if (!is_null($satirlar)){
$count=count($satirlar)+$this->baslangicsatir;
for ($i=$satir;$i<$count;$i++){
$this->xlsWriteLabel($i,$sutun,mb_convert_encoding(stripslashes($this->sutunlar[$i]),$this->toencoding,$this->fromencoding);
}
}
// Çalışma Kitabımızın Sonunu belirleyelim
xlsEOF();
}
}
?>
xlsEOF();
}
}
?>
bu class ile şimdilik sadece başlığı, satırları ve sütunları devamında değerlerimizi yerlşetireceğiz. o biraz daha karışık olacak iki boyutlu diziler olacak tek boyutlu diziler olacak şimdilik 3 boyutluya girmek istemiyorum.
0 yorum:
Yorum Gönder