您现在的位置是:网站首页> php专栏 工具分享
tp5使用PhpSpreadsheet扩展导出excel
亦然2019-09-21 14:43:33【工具分享】人已围观
简介PhpSpreadsheet是一个纯PHP类库,它提供了一组类,允许您从不同的电子表格文件格式(如Excel和LibreOffice Calc)读取和写入。
最近项目上有需求,实现用查询的数据可以直接导出成excel。在此记录一下使用PhpSpreadsheet把数据导出的过程。
一:composer安装PhpSpreadsheet组件
#版本号也可忽略 composer require phpoffice/phpspreadsheet 版本号
安装完成之后,会在vendor文件夹下有个phpoffice文件。
如果composer安装卡住,需要更换一下国内源,下方是阿里云的镜像源地址。
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
二:tp5简单导出实例
首先在控制器中引入类库。
//实际项目中,可根据情况引入 use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Reader\Xls; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup; use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Style\Fill; use PhpOffice\PhpSpreadsheet\Style\Color; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
在控制器中,定义导出方法,如下:
public function daochu()
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
//设置工作表标题名称
$worksheet->setTitle('测试表');
//表头
//设置单元格内容
$worksheet->setCellValueByColumnAndRow(1, 1, '测试');
$worksheet->setCellValueByColumnAndRow(1, 2, '序号');
$worksheet->setCellValueByColumnAndRow(2, 2, 'ip地址');
$worksheet->setCellValueByColumnAndRow(3, 2, '子域名');
$worksheet->setCellValueByColumnAndRow(4, 2, '标题');
//合并单元格
$worksheet->mergeCells('A1:E1');
$styleArray = [
'font' => [
'bold' => true
],
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
],
];
//设置单元格样式
$worksheet->getStyle('A1')->applyFromArray($styleArray)->getFont()->setSize(28);
$worksheet->getStyle('A2:E2')->applyFromArray($styleArray)->getFont()->setSize(14);
;
//查询数据
$jzInfo = db('dns')->where('domain_zhu','enn.cn')->select();
$len = count($jzInfo);
$j = 0;
for ($i=0; $i < $len; $i++) {
$j = $i + 3; //从表格第3行开始
$worksheet->setCellValueByColumnAndRow(1, $j, $jzInfo[$i]['id']);
$worksheet->setCellValueByColumnAndRow(2, $j, $jzInfo[$i]['ip']);
$worksheet->setCellValueByColumnAndRow(3, $j, $jzInfo[$i]['domain']);
$worksheet->setCellValueByColumnAndRow(4, $j, $jzInfo[$i]['title']);
}
$styleArrayBody = [
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['argb' => '666666'],
],
],
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
],
];
$total_jzInfo = $len + 2;
//添加所有边框/居中
$worksheet->getStyle('A1:C'.$total_jzInfo)->applyFromArray($styleArrayBody);
$filename = '测试表.xlsx';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');//禁止缓存
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
}
测试结果如下:
很赞哦!()




