记录一下PHPexcel导出
神坑:在代码末尾加入exit(); 否则文件打不开
神坑原理总结(盲猜):在我们使用的框架中(前后端分离架构)响应参数时会有一些参数过滤机制,会重新声明参数类型 或者header ,从而导致文件损坏打不开
1:设置标题
2:设置内容
3:声明header
4:抛出文件
5:这段代码稍微改一改就可以变为抽象化代码
/**
* 案件导出
*
* @param $param
*
*/
public function dealCasePort($result)
{
$spreadsheet = new Spreadsheet();
$workSheet = $spreadsheet->getActiveSheet();
//Excel表名
$tableName = '成交案件';
$workSheet->setTitle($tableName);
$title = ['案件编号', '是否成交', '是否结案', '是否收佣', '案件状态', '物业名称', '总佣金(元)', '外佣(元)', '已收(元)', '未收(元)', '下家姓名', '创建人', '创建时间'];
//标题
$column = 0;
for ($i = 1; $i <= count($title); $i++) {
$workSheet->setCellValueByColumnAndRow($i, 1, $title[$column]);
$column++;
}
//内容(从第二行开始遍历)
$row = 2;
foreach ($result as &$val) {
unset($val['id']);
//从第一列开始遍历
$column = 1;
foreach ($val as $v) {
$workSheet->setCellValueByColumnAndRow($column, $row, $v . ' ');
$column++;
}
$row++;
}
//重新声明header
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename=' . $tableName . '.xlsx');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit();
}