由来:公司是考务公司,做考试系统的,考试就会有考场(例:第二考场),考点(例:西北工业大学考点),签到表张贴表
我要做的就是让运营方面更加轻松,那么比如运营要导出每个考点下面考场的签到表和张贴表,正常来说一个考场有签到、张贴表
一个个导出的话,如果考试人数很多,一个个导出再打印会很麻烦,效率特别低,所以我写了一个程序,导出的签到表,张贴表可以按照考点导出一个excel,这个excel内是多个sheet,一个考场一个sheet,并且每个sheet都是有格式的(背景颜色,大小,合并,居中等),可以直接打印多个sheet,极大降低了人力成本,下面是我做的导出多个sheet步骤
导出多个sheet,在网上查看了一些代码,很少有人讲述具体的,或者说跟我们业务逻辑有关吧,所以我自己总结了一下,贴代码:
/**
* @param $cands 每个考场考生数据
* @param $site_name 考点名称
* @param $other_data 考场数据
* @param string $sheet_page 第几个考场的sheet数量
* @param string $room_num 总考场数量
* @param string $excel 考点下考场的总数
* @return PHPExcel|string|void
* 作用: 该方法是导出考点下面多个考场的excel,就是导出一个excel,里面有多个sheet,每个sheet都是一个考场,有自己的格式样式
* 思路:先对一个考点一个考场还是多个考场进行判断,若是一个考场,则不用返回 phpexcel对象,若是多个则需要返回
* 因为导出多个sheet phpexcel只能new一次,若多次会报错,所以多个考场的话在第一个考场写入数据同时,返回一个
* phpexcel对象,第二个考场发送的时候,会带上上一次返回的对象,从而形成专属于机考云导出考点多个sheet,慎改
*/
public function table_export($cands, $site_name, $other_data, $sheet_page='', $room_num='', $excel='')
{
if( !empty($cands && $site_name && $other_data) ) {
//创建对象
if ($sheet_page == 0) {
$excel = new PHPExcel();
$first_sheet_title = $other_data['room_name'].'签到表';
$this->sheet_more_sign($cands, $other_data, $excel);
$excel->setActiveSheetIndex(0);
$excel->getActiveSheet()->setTitle($first_sheet_title);
}
if ($sheet_page > 0) {
$first_sheet_title = $other_data['room_name'].'签到表';
$excel->createSheet();
$excel->setActiveSheetIndex($sheet_page);
$this->sheet_more_sign($cands, $other_data, $excel);
$excel->getActiveSheet()->setTitle($first_sheet_title);
}
if ($sheet_page == 0 && $sheet_page+1 != $room_num) {
return $excel;
}
if ($sheet_page+1 == $room_num) {
$write = PHPExcel