用的是tp6框架。
先引入composer
composer require phpoffice/phpspreadsheet
直接上代码
<?php
/*
* author hzbskak
* email hzbskak@gmail.com
* date 2021/6/3
*/
namespace demo\service;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
/**
* Excel通用类
* Class Excel
* @package demo\service
*/
class Excel
{
/**
* 导出excel
* @param array $fields 字段, eg: ['字段1', '字段2'...]
* @param array $data 数据
* @param string|null $filename 导出文件名
* @return bool
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public static function makeExcel(array $fields = [], array $data = [], string $filename = '')
{
if (!is_array($fields) || !is_array($data)) {
return false;
}
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// sheet title
$sheet->setTitle($filename);
$startRow = 1; // 数据起始行
foreach ($data as $key => $value) {
foreach ($fields as $k => $v) {
$column = Coordinate::stringFromColumnIndex($k + 1);
if ($key == 0) {
$sheet->setCellValue($column . $startRow, $v['name']);
$sheet->getColumnDimension($column)->setWidth(20);
}
$i = $key + 2; //表格是从2开始的
$sheet->setCellValue($column . $i, $value[$v['key']]);
}
}
$filename = urlencode($filename).'.xlsx';
// make file
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
header('Pragma: public');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
}
}
// 调用方式
Excel::makeExcel($fields, $data, '文件名');