安装phpoffice/phpspreadsheet
composer require phpoffice/phpspreadsheet
github地址: https://github.com/PHPOffice/PhpSpreadsheet
PhpSpreadsheet's documentation相关文档:https://phpspreadsheet.readthedocs.io/en/develop/
使用范例(范例使用ThinkPHP5.0框架)
/**
* 表格数据导出
*/
public function export_excel()
{
//获取任务对应的表名,以及采集数据id
$param = $this->request->param();
$id = $param['id'];
$info = Db::name('crawler_task')->where('id', $id)->find();
$table_name = $info['table_name'];
$crawler_id = json_decode($info['crawler_id'], true);
//获取数据
$data = Db::table($info['table_name'])->whereIn('id', $crawler_id)->select()->toArray();
//获取表信息
$sql = "SHOW FULL COLUMNS FROM $table_name";
$table_structure = Db::table($table_name)->query($sql);
$table_field = array_column($table_structure, 'Field');
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$field_len = count($table_field);
$end_alpha = chr(63 + $field_len);
// 设置表标题名称
$worksheet->setTitle($info['task_name']);
//循环填充第一行数据
foreach ($table_structure as $key => $value) {
if ($value['Field'] != 'id') { //去除id表头
$worksheet->setCellValueByColumnAndRow($key, 1, $value['Field']);
}
}
//设置第一行样式
$styleArray = [
'font' => [
'bold' => true
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
$worksheet->getStyle('A1:' . $end_alpha . '1')->applyFromArray($styleArray)->getFont()->setSize(14);
//填充表数据
$len = count($data);
for ($i = 0; $i < $len; $i++) {
$j = $i + 2;
foreach ($table_field as $key => $value) {
if ($key != 0) { //去除id数据
$worksheet->setCellValueByColumnAndRow($key, $j, $data[$i][$value]);
}
}
}
//设置数据表格样式
$styleArrayBody = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '666666'],
],
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
$total_rows = $len + 1;
//添加所有边框/居中
$worksheet->getStyle('A1:' . $end_alpha . $total_rows)->applyFromArray($styleArrayBody);
$file_name = $info['task_name'] . ".xls";
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename=' . $file_name );
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');
}