php+Spreadsheet导出多个sheet
浏览量:188
产品需求让一键导出多个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]);
}
}
}
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。