php+Spreadsheet导出多个sheet
浏览量:173
产品需求让一键导出多个sheet,脑子里面立马想到了PhpOffer
<?php namespace app\count\logic; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /** * 按照不同的条件导出 * @param $data * auth:lianghuiju@aocyun.com * time:2021/6/3 17:39 */ public function getExportCountExcel(){ $exportRes = array( 'campusList'=>array( "0"=>array( 'CampusName'=>'学校', 'PreviewTimes'=>'500', 'DateTime'=>'20210610' ), "1"=>array( 'CampusName'=>'学校1', 'PreviewTimes'=>'500', 'DateTime'=>'20210610' ), ), 'classList'=>array( "0"=>array( 'CampusName'=>'校区1', 'ClassName'=>'班级1', 'LookBackTotal'=>'34' ), "1"=>array( 'CampusName'=>'校区2', 'ClassName'=>'班级2', 'LookBackTotal'=>'8' ), ) ); $this->dataAll($exportRes); } /** * 格式化标准数据并导出 * @param $data * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception * auth:lianghuiju * time:2021/6/7 18:32 */ public function dataAll($data){ $lastArr = []; $num = count($lastArr); if(isset($data['campusList'])){ $lastArr[$num]['title'] = "机构数据"; $lastArr[$num]['rows'][0] = ['学校名称','预习平均使用时长','学习日期']; $i = 1; foreach ($data['campusList'] as $key =>$value){ $lastArr[$num]['rows'][$i++]=[$value['CampusName'],$value['PreviewTimes'],$value['DateTime']]; } } $num = count($lastArr); if(isset($data['classList'])){ $lastArr[$num]['title'] = "校区数据"; $lastArr[$num]['rows'][0] = ['学校名称','班级名称','预习平均使用时长']; $i = 1; foreach ($data['classList'] as $value){ $lastArr[$num]['rows'][$i++]=[$value['CampusName'],$value['ClassName'],$value['LookBackTotal']]; } } $this->xtexport($lastArr); } /** * 数据导出 * @param $data_array * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception * auth:lianghuiju * time:2021/6/7 18:15 */ public function xtexport($data_array) { $name = '学习统计' . date("Y-m-d", time()); $spreadsheet = new Spreadsheet(); foreach ($data_array as $key => $data) { $this->opSheet($spreadsheet,$key,$data); } header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $name . '.xlsx"'); header('Cache-Control: max-age=0'); $writer = new Xlsx($spreadsheet); $writer->save('php://output'); $spreadsheet->disconnectWorksheets();//删除清空: unset($spreadsheet); exit; } /** * 数据填充到excel * @param $spreadsheet * @param $n * @param $data * auth:lianghuiju * time:2021/6/7 18:30 */ private function opSheet($spreadsheet,$n, $data){ $spreadsheet->createSheet();//创建sheet $spreadsheet->setActiveSheetIndex($n);//设置当前的活动sheet $keys = $data['rows'][0];//这是你的数据键名 $count = count($keys);//计算你所占的列数 $infoStart = 1 ;//下面的详细信息的开始行数 $sheet = $spreadsheet->getActiveSheet($n)->setTitle($data['title']);//设置sheet的名称 foreach ($data['rows'] as $key => $item) { for ($i = 65; $i < $count + 65; $i++) { $sheet->setCellValue(strtoupper(chr($i)) . ($key+"$infoStart"), $item[$i - 65]); } } }
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。