php代码
$saishi_id = I('post.saishi_id');
$map['status'] = 1;
$map['saishi_id'] = $saishi_id;
$model = D('PeopleView');
// 通过赛事id 来查赛事名称
$saishi = M('saishi')->where(array('saishi_id'=>$saishi_id))->find();
$list = $model->where($map)->order('id DESC')->select(); // 数据
foreach ($list as $key=>$val){
$list[$key]['add_time'] = date( "Y-m-d H:i:s",$val['add_time']);
}
// 引入phpexcel核心文件,不是tp,你也可以用include(‘文件路径’)来引入
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.Reader.Excel5");
$excel = new \PHPExcel();
$savefile = $saishi['saishi_title'].'('.$saishi['group'].')'; // Excel文件名
// 设置excel属性
$objActSheet = $excel->getActiveSheet();
// 根据有生成的excel多少列,$letter长度要大于等于这个值
$letter = array('A', 'B', 'C', 'D', 'E', 'F','G');
$datafield = array('name', 'idcard', 'mobile', 'qiudui_name', 'saishi_title','groups','add_time');
$fileheader = array('姓名', '身份证号', '电话', '所属球队', '所属赛事','赛事组别','报名时间');
// 设置当前的sheet
$excel->setActiveSheetIndex(0);
// 设置sheet的name
$objActSheet->setTitle($saishi['saishi_title'].'('.$saishi['group'].')'.'球员表格');
// 设置表头
for ($i = 0; $i < count($fileheader); $i++) {
// 单元宽度自适应,1.8.1版本phpexcel中文支持勉强可以,自适应后单独设置宽度无效
//$objActSheet->getColumnDimension("$letter[$i]")->setAutoSize(true);
// 设置表头值,这里的setCellValue第二个参数不能使用iconv,否则excel中显示false
$objActSheet->setCellValue("$letter[$i]1", $fileheader[$i]);
// 设置表头字体样式
$objActSheet->getStyle("$letter[$i]1")->getFont()->setName('微软雅黑');
// 设置表头字体大小
$objActSheet->getStyle("$letter[$i]1")->getFont()->setSize(12);
// 设置表头字体是否加粗
$objActSheet->getStyle("$letter[$i]1")->getFont()->setBold(true);
// 设置表头文字垂直居中
$objActSheet->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 设置文字上下居中
$objActSheet->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
// 设置表头外的文字垂直居中
$excel->setActiveSheetIndex(0)->getStyle($letter[$i])->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 设置列宽
$objActSheet->getColumnDimension($letter[$i])->setWidth('30px');
}
// 这里$i初始值设置为2,$j初始值设置为0,自己体会原因
foreach ($list as $row => $data) {
$i = $row + 2;
foreach ($datafield as $key => $value) {
$data_v = $data[$value];
if ($value == 'create_time') {
$data_v = $data_v ? date('Y-m-d H:i:s', $data_v) : '无';//判断$data_v有值转换无值显示无
}
if ($value == 'status') {
$data_v = $this->withdrawals_status[$data_v];//状态显示
}
// 不是图片时将数据加入到excel,这里数据库存的图片字段是img
$objActSheet->setCellValue("$letter[$key]$i", $data_v);
// 设置单元格高度,暂时没有找到统一设置高度方法
//$objActSheet->getColumnDimension($letter[$key])->setWidth('80px');
}
}
ob_end_clean(); //清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel');
// 下载的excel文件名称,为Excel5,后缀为xls,不过影响似乎不大
header('Content-Disposition: attachment;filename="' . $savefile . '.xls"');
header('Cache-Control: max-age=0');
// 用户下载excel
$objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$objWriter->save('php://output');
网友评论