一、简介
PHPExcel是一个处理Excel,CVS文件的开源框架,但不幸的是PHPExcel官方已不再维护了这个项目了,官方团队在github上又起了一个新项目,叫PhpSpreadsheet。有兴趣的可以去看下。
二、优缺点
优点:
- 开源
- 功能非常丰富,API非常多,可以使用它来读取、写入不同格式的电子表格,这也是PHP至今最通用的Excel处理工具
缺点:
- 特别占内存,对大批量的表格数据几乎会让人累觉不爱,处理速度非常慢
- PHPExcel官方已不再维护了这个项目
三、常用方法
require_once './phpexcel/PHPExcel.php'; //引用phpexcel文件
/* 创建对象 */
$objPHPExcel = new PHPExcel(); //首先创建一个新的对象 PHPExcel object
/* 对表格操作 */
//创建新的内置表
$objPHPExcel->createSheet();//创建新的内置表
$objPHPExcel->setActiveSheetIndex(0); //设置第一个内置表(一个xls文件里可以有多个表)为活动的
$objActiveSheet = $objPHPExcel->getActiveSheet();//得到当前活动的表
$objActiveSheet ->setTitle('三年二班'); //给当前活动的表设置名称
$objActiveSheet ->setCellValue( 'A1', 'Hello' ); //给表的单元格设置数据,可以连贯操作
$objActiveSheet ->getCell('A1') ->setValue('Hello'); //与上一行作用相同
$objActiveSheet -> fromArray($data,null,'A2'); //从数组赋值,
//第一个参数是要负责的二维数组,如$data = array( array(NULL, 2010, 2011, 2012), array('Q1', 12, 15, 21), array('Q2', 56, 73, 86), array('Q3', 52, 61, 69), array('Q4', 30, 32, 0));
//第二个参数讲什么设置成空白单元格,默认为null(@param mixed $nullValue Value in source array that stands for blank cell)
//第三个参数是从哪个单元格开始填充
//代码示例
/**
* 导出到excel
* @param $data
* @param $outfilename
* @param $classname
*/
public function exportExcel($data, $outfilename, $classname){
vendor('Excel.PHPExcel');
//创建PHPExcel对象
$objPHPExcel = new PHPExcel();
$objPHPExcel -> setActiveSheetIndex(0); //设置第一个内置表为活动的
$objActiveSheet = $objPHPExcel->getActiveSheet();
//获取总人数
$count = isset($data['data']) ? count($data['data']) : 0;
$title = $classname.' 共'.$count.'人';
$objActiveSheet -> setTitle($title);
for($i=0;$i<$data['total_count'];$i++){
$objActiveSheet->getColumnDimensionByColumn($i)->setWidth(15); //设置列宽带
}
//第一行数据填充
if(isset($data['row1'])){
foreach ($data['row1'] as $val){
$pColumn1 = $val['index'];
if($val['count'] > 1){
$pColumn2 = $pColumn1 + $val['count'] - 1;
$objActiveSheet->mergeCellsByColumnAndRow($pColumn1,1,$pColumn2,1)->setCellValueByColumnAndRow($pColumn1,1,$val['catename']);
}else{
$objActiveSheet -> setCellValueByColumnAndRow($pColumn1, 1, $val['catename']);//通过行列值来给单元格赋值
}
$objActiveSheet->getStyleByColumnAndRow($pColumn1,1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);//设置对齐方式
}
}
//第二行数据填充
if(isset($data['row2'])){
$objActiveSheet -> fromArray($data['row2'],null,'A2');
}
//用户行数据填充
if(isset($data['data'])){
$objActiveSheet -> fromArray($data['data'], null,'A3');
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//header("Content-Disposition: attachment; filename=\"$outfilename\"");
//header('Cache-Control: max-age=0');
//$objWriter->save('php://output')
$objWriter->save($outfilename); //直接保存到服务器上git
}