Zend - The PHP Company




Miscellaneous

Add Code


PHP Simple Excel File Generator  

Type: class library
Added by: Erol_Ozcan
Entered: 18/05/2001
Last modified: 05/12/2000
Rating: ***** (16 votes)
Views: 30943
This project includes some classes which are used to generate very simple MS Excel file (xls) via PHP. The generated xls file can be obtained by web as a stream file or can be written under $default_dir path. It has very simple usage to generate xls file from a select query using mysql, pgsql, oci8 databases. Limitation: - Max character size of a text(label) cell is 255 ( due to MS Excel 5.0 Binary File Format definition ) Please get the full pack at http://sourceforge.net/projects/psxlsgen/


<?php
/****************************************************************
* Script         : PHP Simple Excel File Generator - Base Class
* Project        : PHP SimpleXlsGen
* Author         : Erol Ozcan <eozcan@superonline.com>
* Version        : 0.2
* Copyright      : GNU LGPL
* URL            : http://psxlsgen.sourceforge.net
* Last modified  : 19 May 2001
* Description     : This class is used to generate very simple
*   MS Excel file (xls) via PHP.
*   The generated xls file can be obtained by web as a stream
*   file or can be written under $default_dir path. This package
*   is also included mysql, pgsql, oci8 database interaction to
*   generate xls files.
*   Limitations:
*    - Max character size of a text(label) cell is 255
*    ( due to MS Excel 5.0 Binary File Format definition )
*
* Credits        : This class is based on Christian Novak's small
*    Excel library functions.
******************************************************************/

if( !defined"PHP_SIMPLE_XLS_GEN" ) ) {
   
define"PHP_SIMPLE_XLS_GEN");

   class  
PhpSimpleXlsGen {
      var  
$class_ver "0.2";    // class version
      
var  $xls_data   "";      // where generated xls be stored
      
var  $default_dir "";     // default directory to be saved file
      
var  $filename  "psxlsgen";       // save filename
      
var  $fname    "";        // filename with full path
      
var  $crow     0;         // current row number
      
var  $ccol     0;         // current column number
      
var  $totalcol 0;         // total number of columns
      
var  $get_type 0;         // 0=stream, 1=file
      
var  $errno    0;         // 0=no error
      
var  $error    "";        // error string
      
var  $dirsep   "/";       // directory separator
      
var  $header   1;         // 0=no header, 1=header line for xls table

     // Default constructor
     
function  PhpSimpleXlsGen()
     {
       
$os getenv"OS" );
       
$temp getenv"TEMP");
       
// check OS and set proper values for some vars.
       
if ( stristr$os"Windows" ) ) {
          
$this->default_dir $temp;
          
$this->dirsep "\";
       } else {
         // assume that is Unix/Linux
         
$this->default_dir = "/tmp";
         
$this->dirsep =  "/";
       }
       // begin of the excel file header
       
$this->xls_data = pack( "ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0 );
       // check header text
       if ( 
$this->header ) {
         
$this->Header();
       }
     }

     function Header
$text="" ) {
        if ( 
$text == "" ) {
           
$text = "This file was generated using PSXlsGen at ".date("r");
        }
        if ( 
$this->totalcol < 1 ) {
          
$this->totalcol = 1;
        }
        
$this->InsertText$text );
        
$this->crow += 2;
        
$this->ccol = 0;
     }

     // end of the excel file
     function End()
     {
       
$this->xls_data .= pack( "ss", 0x0A, 0x00 );
       return;
     }

     // write a Number (double) into row, col
     function WriteNumber_pos( 
$row$col$value )
     {
        
$this->xls_data .= pack( "sssss", 0x0203, 14, $row$col, 0x00 );
        
$this->xls_data .= pack( "d", $value );
        return;
     }

     // write a label (text) into Row, Col
     function WriteText_pos( 
$row$col$value )
     {
        
$len = strlen$value );
        
$this->xls_data .= pack( "s*", 0x0204, 8 + $len$row$col, 0x00, $len );
        
$this->xls_data .= $value;
        return;
     }

     // insert a number, increment row,col automatically
     function InsertNumber( 
$value )
     {
        if ( 
$this->ccol == $this->totalcol ) {
           
$this->ccol = 0;
           
$this->crow++;
        }
        
$this->WriteNumber_pos$this->crow$this->ccol, &$value );
        
$this->ccol++;
        return;
     }

     // insert a number, increment row,col automatically
     function InsertText( 
$value )
     {
        if ( 
$this->ccol == $this->totalcol ) {
           
$this->ccol = 0;
           
$this->crow++;
        }
        
$this->WriteText_pos$this->crow$this->ccol, &$value );
        
$this->ccol++;
        return;
     }

     // Change position of row,col
     function ChangePos( 
$newrow$newcol )
     {
        
$this->crow = $newrow;
        
$this->ccol = $newcol;
        return;
     }

     // new line
     function NewLine()
     {
        
$this->ccol = 0;
        
$this->crow++;
        return;
     }

     // send generated xls as stream file
     function SendFile( 
$filename )
     {
        
$this->filename = $filename;
        
$this->SendFile();
     }
     // send generated xls as stream file
     function SendFile()
     {
        
$this->End();
        header ( "
ExpiresMon1 Apr 1974 05:00:00 GMT" );
        header ( "
Last-Modified" . gmdate("D,d M YH:i:s") . " GMT" );
        header ( "
Cache-Controlno-cachemust-revalidate" );
        header ( "
Pragmano-cache" );
        header ( "
Content-typeapplication/x-msexcel" );
        header ( "
Content-Dispositionattachmentfilename=$this->filename.xls" );
        header ( "
Content-DescriptionPHP Generated XLS Data" );
        print 
$this->xls_data;
     }

     // change the default saving directory
     function ChangeDefaultDir( 
$newdir )
     {
       
$this->default_dir = $newdir;
       return;
     }

     // Save generated xls file
     function SaveFile( 
$filename )
     {
        
$this->filename = $filename;
        
$this->SaveFile();
     }

     // Save generated xls file
     function SaveFile()
     {
        
$this->End();
        
$this->fname = $this->default_dir."$this->dirsep".$this->filename;
        if ( !stristr
$this->fname, ".xls" ) ) {
          
$this->fname .= ".xls";
        }
        
$fp = fopen$this->fname, "wb" );
        fwrite
$fp$this->xls_data );
        fclose
$fp );
        return;
     }

     // Get generated xls as specified type
     function GetXls( 
$type = 0 ) {
         if ( !
$type && !$this->get_type ) {
            
$this->SendFile();
         } else {
            
$this->SaveFile();
         }
     }
   } // end of the class PHP_SIMPLE_XLS_GEN
}
// end of ifdef PHP_SIMPLE_XLS_GEN


Usage Example


<?php
/****************************************************************
* Script         : Simple test example for PhpSimpleXlsGen
* Project        : PHP SimpleXlsGen
* Author         : Erol Ozcan <eozcan@superonline.com>
* Version        : 0.2
* Copyright      : GNU LGPL
* URL            : http://psxlsgen.sourceforge.net
* Last modified  : 18 May 2001
******************************************************************/
include( "psxlsgen.php" );

$myxls = new PhpSimpleXlsGen();
$myxls->totalcol 2;
$myxls->InsertText"Erol" );
$myxls->InsertText"Ozcan" );
$myxls->InsertText"This text should be at (3,0) if header was used, otherwise at (1,0)" );
$myxls->ChangePos(4,0);
$myxls->InsertText"You must pay" );
$myxls->InsertNumber20.48 );
$myxls->WriteText_pos(4,2"USD to use this class :-))" );         // hidden costs :-))
$myxls->SendFile();


Rate This Script





Search



This Category All Categories