phpspreadsheet安装:
composer require phpoffice/phpspreadsheet
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
//可以生成多种格式类
use PhpOffice\PhpSpreadsheet\IOFactory;
class Excel
{
/**
* 导出数据
* @param $filename 文件名
* @param $title 表头
* @param $data 数据
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public function downloadExcel($filename,$title,$data)
{
$cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
$spreadsheet = new Spreadsheet();
$spreadsheet->setActiveSheetIndex(0);
$sheet = $spreadsheet->getActiveSheet();
//表头长度
$title_count = count($title);
for($i=0 ; $i<$title_count ; $i++) {
$sheet->setCellValue($cellName[$i].'1',$title[$i]);
}
//n列数据
$column = $i;
//行下标
$index = 0;
foreach ($data as $row_index => $row_value) {
//写入excel第n行
$index = $row_index+2;
//列下标
$cell_index = 0;
foreach($row_value as $k => $v){
//设置第n行数据的A,B,C...列
if(!empty($v)){
$sheet->setCellValue($cellName[$cell_index].$index,$v);
}
$cell_index++;
}
}
//n行数据加1行表头
$row = $index;
// 设置垂直居中
$spreadsheet->getActiveSheet()->getStyle("A1:".($cellName[$column-1]).$row)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
// 设置水平居中
$spreadsheet->getActiveSheet()->getStyle("A1:".($cellName[$column-1]).$row)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
header("Content-Disposition: attachment;filename=$filename.xlsx");
header('Content-Type: applicsation/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$writer = IOFactory::createWriter($spreadsheet,'Xlsx');
ob_end_clean();
$writer->save('php://output');
}