首页 > php教程 > php手册 > phpExcel在封装

phpExcel在封装

WBOY
发布: 2016-06-13 10:58:19
原创
1206 人浏览过

/**
 * 数组生成Excel
 * @author zouhao  zouhao619@gmail.com
 * 使用示例
 * $excel =new Excel();
 $data=array(
   array('id'=>1,'name'=>'天命1'),
   array('id'=>2,'name'=>'天命2')
  );
 $header=array('ID','角色名');
 $excel->setFileName('aaa');
 $excel->setTitle('工作区1');
 $excel->create($data,$header);
 */
class Excel {
 private $excelObj;
 private $fileName='download.xls';
 /**
  * 设置下载时文件名
  * @param string $fileName
  */
 public function setFileName($fileName){
  $this->fileName=$fileName.'.xls';
 }
 /**
  * 设置标题
  * @param string $title         
  */
 public function setTitle($title) {
  $this->excelObj->getActiveSheet ()->setTitle ( $title );
 }
 public function __construct() {
  // 先取消原框架的自动注册机制,避免和excel自动加载机制冲突
  spl_autoload_unregister ( 'autoload' );
  require LIBRARY_PATH . '/PHPExcel/PHPExcel.php';
  $this->excelObj = new PHPExcel ();
 }
 /**
  * 根据总数,返回列数组
  *
  * @param int $count         
  * @return array
  */
 private function getCharByNumber($data) {
  // 自动减去头部
  $count = count ( $data ['0'] );
  $keys=array();
  for($number = 1; $number    $divisor= intval($number / 26);
   $char = chr ( 64 + $number % 26 );
   $char = $divisor == 0 ? $char : chr ( 64 +$divisor) . $char;
   $keys [] = $char;
  }
  return $keys;
 }
 /**
  * 生成Excel表格
  * @param array $data  二维数组
  * @param array $replace 需要替换的数组
  */
 public function create($data,$header=array(),$replace = null) {
  empty($data) and exit('没有数据');
  $keys = $this->getCharByNumber ( $data );
  $this->createHeader ( $header, $keys );
  $j=0;
  foreach ( $data as $i=>$vo ) {
   $j=0;
   foreach ( $vo as $key => $item ) {
    if (isset ( $replace [$key] )){
     $this->excelObj->setActiveSheetIndex ( 0 )->setCellValue ( $keys [$j] . ($i + 2), $replace [$key] [$item] );
    }else{
     $this->excelObj->setActiveSheetIndex ( 0 )->setCellValue ( $keys [$j] . ($i + 2), $item );
    }
    ++$j;
   }
  }
  //输出到临时缓冲区  提供下载
  header ( "Content-Type: application/force-download" );
  header ( "Content-Type: application/octet-stream" );
  header ( "Content-Type: application/download" );
  header ( 'Content-Disposition:inline;filename="'.$this->fileName.'"' );
  header ( "Content-Transfer-Encoding: binary" );
  header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
  header ( "Pragma: no-cache" );
  $objWriter = PHPExcel_IOFactory::createWriter ( $this->excelObj, 'Excel5' );
  $objWriter->save ( 'php://output' );
 }
 /**
  * 创建头部
  *
  * @param array $data         
  */
 private function createHeader($header, $keys) {
  $header = array_combine ( $keys, $header );
  foreach ( $header as $key => $vo ) {
   $this->excelObj->setActiveSheetIndex ( 0 )->setCellValue ( "{$key}1", $vo );
  }
 }
}


使用示例:


$excel =new Excel();
 $data=array(
   array('id'=>1,'name'=>'天命1'),
   array('id'=>2,'name'=>'天命2')
  );
 $header=array('ID','角色名');
 $excel->setFileName('aaa');
 $excel->setTitle('工作区1');
 $excel->create($data,$header);也就是说,从数据库里拿出的二维数组可以直接创建,

另外,有的字段为type,保存为int类型的,代表某一个状态的.可以参考create第三个参数

举例:


$excel =new Excel();
 $data=array(
   array('id'=>1,'name'=>'天命1','type'=>1),
   array('id'=>2,'name'=>'天命2','type'=>2)
  );
        $replace['type']=array(1=>'猛男',2=>'萌女');
 $header=array('ID','角色名');
 $excel->setFileName('aaa');
 $excel->setTitle('工作区1');
 $excel->create($data,$header,$replace);

 

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板