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);
http://www.bkjia.com/phpjc/477193.htmlwww.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...