//通过composer安装到vend后直接引入
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
//数据库查询的内容直接调用,excel函数,传入文件名称和数据即可
//excel写入
public function excle($fileName='test.xlsx',$data){
/* 写入excel */
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
//设置工作表标题名称
$worksheet->setTitle('用户信息表');
//表头
//设置单元格内容
$worksheet->setCellValueByColumnAndRow(1, 1, '用户信息表');
$worksheet->setCellValueByColumnAndRow(1, 2, '用户名');
$worksheet->setCellValueByColumnAndRow(2, 2, '手机');
$worksheet->setCellValueByColumnAndRow(3, 2, '省');
$worksheet->setCellValueByColumnAndRow(4, 2, '市');
$worksheet->setCellValueByColumnAndRow(5, 2, '区');
$worksheet->setCellValueByColumnAndRow(6, 2, '详细地址');
//合并单元格第一行
$worksheet->mergeCells('A1:F1');
//设置列宽
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(60);
//读取数据
$len=count($data); //数组长度
for ($i=0; $i < $len; $i++) {
$j = $i + 3; //从表格第3行开始
$worksheet->setCellValueByColumnAndRow(1, $j, $data[$i]['nickname']);
$worksheet->setCellValueByColumnAndRow(2, $j, $data[$i]['phone']);
$worksheet->setCellValueByColumnAndRow(3, $j, $data[$i]['province']);
$worksheet->setCellValueByColumnAndRow(4, $j, $data[$i]['city']);
$worksheet->setCellValueByColumnAndRow(5, $j, $data[$i]['county']);
$worksheet->setCellValueByColumnAndRow(6, $j, $data[$i]['address']);
}
// $writer = new Xlsx($spreadsheet);
// $writer->save($fileName);
// $downloadFileName='123.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename=$fileName");
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet,'Xlsx');
$writer->save('php://output');
}
效果图
注意:
如果前台使用ajax访问函数,可能会出现phpExcel导出excel文件浏览器一直不会出现下载弹框的问题
解决办法:这个问题,说是因为:html用了ajax,导致必须返回数据,与header输出浏览器冲突,导致无法输出excel,并且乱码,使用url方式直接访问即可。
location.href = "{:url('exports')}" //直接通过访问地址就可以
前台改成了url访问的模式,结果就好了。