欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

phpExcel在封装_PHP教程

程序员文章站 2022-05-04 11:37:43
...
/**
* 数组生成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);

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477193.htmlTechArticle?php /** * 数组生成Excel * @author zouhao zouhao619@gmail.com * 使用示例 * $excel =new Excel(); $data=array( array(id=1,name=天命1), array(id=2,name=天命2) ); $header=a...