用Simple Excel导出xls实现方法

  因为前几天写了篇文章,用php-excel-reader类导入excel内容,顺便说些excel导出问题,我用的是simple excel,一个很简单的导出xls类,特好用!

  simple excel源码如下:

  

复制代码 代码如下:

  <?php

  /**

  * Simple excel generating from PHP5

  *

  * @package Utilities

  * @license http://www.opensource.org/licenses/mit-license.php

  * @author Oliver Schwarz <[email protected]>

  * @version 1.0

  */

  class Excel_Xml

  {

  private $header = "<?xml version=\"1.0\" encoding=\"%s\"?\>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:html=\"http://www.w3.org/TR/REC-html40\">";

  private $footer = "</Workbook>";

  private $lines = array();

  private $sEncoding;

  private $bConvertTypes;

  private $sWorksheetTitle;

  public function __construct($sEncoding = 'UTF-8', $bConvertTypes = false, $sWorksheetTitle = 'Table1')

  {

  $this->bConvertTypes = $bConvertTypes;

  $this->setEncoding($sEncoding);

  $this->setWorksheetTitle($sWorksheetTitle);

  }

  public function setEncoding($sEncoding)

  {

  $this->sEncoding = $sEncoding;

  }

  public function setWorksheetTitle ($title)

  {

  $title = preg_replace ("/[\\\|:|\/|\?|\*|\[|\]]/", "", $title);

  $title = substr ($title, 0, 31);

  $this->sWorksheetTitle = $title;

  }

  private function addRow ($array)

  {

  $cells = "";

  foreach ($array as $k => $v):

  $type = 'String';

  if ($this->bConvertTypes === true && is_numeric($v)):

  $type = 'Number';

  endif;

  $v = htmlentities($v, ENT_COMPAT, $this->sEncoding);

  $cells .= "<Cell><Data ss:Type=\"$type\">" . $v . "</Data></Cell>\n";

  endforeach;

  $this->lines[] = "<Row>\n" . $cells . "</Row>\n";

  }

  public function addArray ($array)

  {

  foreach ($array as $k => $v)

  $this->addRow ($v);

  }

  public function generateXML ($filename = 'excel-export')

  {

  $filename = preg_replace('/[^aA-zZ0-9\_\-]/', '', $filename);

  header("Content-Type: application/vnd.ms-excel; charset=" . $this->sEncoding);

  header("Content-Disposition: inline; filename=\"" . $filename . ".xls\"");

  echo stripslashes (sprintf($this->header, $this->sEncoding));

  echo "\n<Worksheet ss:Name=\"" . $this->sWorksheetTitle . "\">\n<Table>\n";

  foreach ($this->lines as $line)

  echo $line;

  echo "</Table>\n</Worksheet>\n";

  echo $this->footer;

  }

  }

  ?>

  使用php案例如下:

  

复制代码 代码如下:

  <?php

  /**

  * @author mckee

  * @blog www.phpddt.com

  */

  require_once 'excel.class.php';

  $xls = new Excel_Xml('UTF-8',false,'测试');

  $data = array(

  1 => array('名称','地址'),

  2 => array('php点点通','www.phpddt.com'),

  3 => array('百度','www.baidu.com')

  );

  $xls->addArray($data);

  $xls->generateXML('name4test');

  ?>

  导出结果如下图:

用Simple Excel导出xls实现方法