转发:::一个简单的写excel文件的类

很多web页面有要求将数据保存为excel格式,以满足那些异常喜爱excel的人,老实说,excel确实是很优秀的产品。
这里的这个类,采用的方法是写xml文件,从office 2003后,office系列增强了对xml文件格式的读写能力,对于简单的excel文件,我们可以简单的写入csv格式文件。稍微复杂的,那就采用表格的方式吧,比如下面的这个类
复制内容到剪贴板
PHP 代码:

<?php
 

    /*
   * Class is used for save the data into microsoft excel format.
   * It takes data into array or you can write data column vise.
   */



  Class ExcelWriter
  {
     
    var $fp= null;
    var $error;
    var $state= "CLOSED";
    var $newRow= false;
   
    /*
    * @Params : $file  : file name of excel file to be created.
    * @Return : On Success Valid File Pointer to file
    *       On Failure return false  
    */

     
    function ExcelWriter ( $file= "" )
    {
      return $this-> open ( $file );
    }
   
    /*
    * @Params : $file  : file name of excel file to be created.
    *       if you are using file name with directory i.e. test/myFile.xls
    *       then the directory must be existed on the system and have permissioned properly
    *       to write the file.
    * @Return : On Success Valid File Pointer to file
    *       On Failure return false  
    */

    function open ( $file )
    {
      if ( $this-> state!= "CLOSED" )
      {
        $this-> error= "Error : Another file is opend .Close it to save the file";
        return false;
      }  
     
      if (! empty ( $file ))
      {
        $this-> fp=@ fopen ( $file, "w+" );
      }
      else
      {
        $this-> error= "Usage : New ExcelWriter('fileName')";
        return false;
      }  
      if ( $this-> fp== false )
      {
        $this-> error= "Error: Unable to open/create File.You may not have permmsion to write the file.";
        return false;
      }
      $this-> state= "OPENED";
      fwrite ( $this-> fp, $this-> GetHeader ());
      return $this-> fp;
    }
   
    function close ()
    {
      if ( $this-> state!= "OPENED" )
      {
        $this-> error= "Error : Please open the file.";
        return false;
      }  
      if ( $this-> newRow )
      {
        fwrite ( $this-> fp, "</tr>" );
        $this-> newRow= false;
      }
     
      fwrite ( $this-> fp, $this-> GetFooter ());
      fclose ( $this-> fp );
      $this-> state= "CLOSED";
      return ;
    }
    /* @Params : Void
    *  @return : Void
    * This function write the header of Excel file.
    */

                   
    function GetHeader ()
    {
      $header = '
        <html xmlns="urn:schemas-microsoft-comfficeffice"
        xmlns:x="urn:schemas-microsoft-comffice:excel"
        xmlns="<a href="http://www.w3.org/TR/REC-html40">" target="_blank">[url=http://www.w3.org/TR/REC-h...<]http://www.w3.org/TR/REC-h...<[/url];/a>

        <head>
        <meta http-equiv=Content-Type c>
        <meta name=ProgId content=Excel.Sheet>
        <!--[if gte mso 9]><xml>
         <oocumentProperties>
          <oastAuthor>Sriram</oastAuthor>
          <oastSaved>2005-01-02T07:46:23Z</oastSaved>
          <o:Version>10.2625</o:Version>
         </oocumentProperties>
         <o:OfficeDocumentSettings>
          <oownloadComponents/>
         </o:OfficeDocumentSettings>
        </xml><![endif]-->
        <style>
        <!--table
          {mso-displayed-decimal-separator:".";
          mso-displayed-thousand-separator:",";}
        @page
          {margin:1.0in .75in 1.0in .75in;
          mso-header-margin:.5in;
          mso-footer-margin:.5in;}
        tr
          {mso-height-source:auto;}
        col
          {mso-width-source:auto;}
        br
          {mso-data-placement:same-cell;}
        .style0
          {mso-number-format:General;
          text-align:general;
          vertical-align:bottom;
          white-space:nowrap;
          mso-rotate:0;
          mso-background-source:auto;
          mso-pattern:auto;
          color:windowtext;
          font-size:10.0pt;
          font-weight:400;
          font-style:normal;
          text-decoration:none;
          font-family:Arial;
          mso-generic-font-family:auto;
          mso-font-charset:0;
          border:none;
          mso-protection:locked visible;
          mso-style-name:Normal;
          mso-style-id:0;}
        td
          {mso-style-parent:style0;
          padding-top:1px;
          padding-right:1px;
          padding-left:1px;
          mso-ignore:padding;
          color:windowtext;
          font-size:10.0pt;
          font-weight:400;
          font-style:normal;
          text-decoration:none;
          font-family:Arial;
          mso-generic-font-family:auto;
          mso-font-charset:0;
          mso-number-format:General;
          text-align:general;
          vertical-align:bottom;
          border:none;
          mso-background-source:auto;
          mso-pattern:auto;
          mso-protection:locked visible;
          white-space:nowrap;
          mso-rotate:0;}
        .xl24
          {mso-style-parent:style0;
          white-space:normal;}
        -->
        </style>
        <!--[if gte mso 9]><xml>
         <x:ExcelWorkbook>
          <x:ExcelWorksheets>
           <x:ExcelWorksheet>
          <x:Name>srirmam</x:Name>
          <x:WorksheetOptions>
           <x:Selected/>
           <xrotectContents>False</xrotectContents>
           <xrotectObjects>False</xrotectObjects>
           <xrotectScenarios>False</xrotectScenarios>
          </x:WorksheetOptions>
           </x:ExcelWorksheet>
          </x:ExcelWorksheets>
          <x:WindowHeight>10005</x:WindowHeight>
          <x:WindowWidth>10005</x:WindowWidth>
          <x:WindowTopX>120</x:WindowTopX>
          <x:WindowTopY>135</x:WindowTopY>
          <x:ProtectStructure>False</x:ProtectStructure>
          <x:ProtectWindows>False</x:ProtectWindows>
         </x:ExcelWorkbook>
        </xml><![endif]-->
        </head>
        <body link=blue vlink=purple>
        <table x:str border=0 cellpadding=0 cellspacing=0 style="border-collapse: collapse;table-layout:fixed;">'
;
      return $header;
    }
    function GetFooter ()
    {
      return "</table></body></html>";
    }    
    /*
    * @Params : $line_arr: An valid array
    * @Return : Void
    */
   
    function writeLine ( $line_arr )
    {
      if ( $this-> state!= "OPENED" )
      {
        $this-> error= "Error : Please open the file.";
        return false;
      }  
      if (! is_array ( $line_arr ))
      {
        $this-> error= "Error : Argument is not valid. Supply an valid Array.";
        return false;
      }
      fwrite ( $this-> fp, "<tr>" );
      foreach ( $line_arr as $col )
      {
        fwrite ( $this-> fp, "<td class=xl24 width=64 >$col</td>n" );
        echo "col is $col
"
;
      }
      fwrite ( $this-> fp, "</tr>n" );
    }
    /*
    * @Params : Void
    * @Return : Void
    */

    function writeRow ()
    {
      if ( $this-> state!= "OPENED" )
      {
        $this-> error= "Error : Please open the file.";
        return false;
      }  
      if ( $this-> newRow== false )
        fwrite ( $this-> fp, "<tr>" );
      else
        fwrite ( $this-> fp, "</tr><tr>" );
      $this-> newRow= true;  
    }
    /*
    * @Params : $value : Coloumn Value
    * @Return : Void
    */

    function writeCol ( $value )
    {
      if ( $this-> state!= "OPENED" )
      {
        $this-> error= "Error : Please open the file.";
        return false;
      }  
      fwrite ( $this-> fp, "<td class=xl24 width=64>$value</td>n" );
    }  
    function writetable ( $strtb )
    {
      if ( $this-> state!= "OPENED" )
      {
        $this-> error= "Error : Please open the file.";
        return false;
      }  
      fwrite ( $this-> fp, $strtb );
    }
  }
?>
 
之前的类并不支持中文,修改后已经支持中文了,只是记得把文件保存为utf8格式。最后面的函数wirtetable我增加的,l你可以直接将某一个表格写入excel文件,下面是演示代码
复制内容到剪贴板
PHP 代码:

<?php
include ( "excelwriter.inc.php" );
$excel= new ExcelWriter ( "myXls.xls" );
if ( $excel== false )  
  echo $excel-> error;  
$myArr= array ( "Name", "Last Name", "Address", "Age" );
$excel-> writeLine ( $myArr );
$myArr= array ( "你好", "Pandit", "23 mayur vihar", 24 );
$excel-> writeLine ( $myArr );
$excel-> writeRow ();
$excel-> writeCol ( "Manoj" );
$excel-> writeCol ( "Tiwari" );
$excel-> writeCol ( "80 Preet Vihar" );
$excel-> writeCol ( 24 );
$excel-> writeRow ();
$excel-> writeCol ( "Harish" );
$excel-> writeCol ( "Chauhan" );
$excel-> writeCol ( "115 Shyam Park Main" );
$excel-> writeCol ( 22 );
$myArr= array ( "Tapan", "Chauhan", "1st Floor Vasundhra", 25 );
$excel-> writeLine ( $myArr );
/*
uncomment the follow code if you wanna write a hole table
*/

/*
$excel->writetable('<table x:str border=0 cellpadding=0 cellspacing=0 style="border-collapse: collapse;table-layout:fixed;"><tr><td class=xl24 width=64 >Name</td>
<td class=xl24 width=64 >Last Name</td>
<td class=xl24 width=64 >Address</td>
<td class=xl24 width=64 >Age</td>
</tr>
<tr><td class=xl24 width=64 >你好</td>
<td class=xl24 width=64 >;Pandit</td>
<td class=xl24 width=64 colspan="2" >23 mayur vihar</td>
</tr>
</tr></table>');*/

$excel-> close ();
echo "data is write into myXls.xls Successfully.";

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值