tp5.1 导出excel 使用插件 为 phpoffice/phpexcel
tp5.1 导出excel 使用插件 为 phpoffice/phpexcel
注意事项:
- 不能使用ajax 请求该数据 必须使用a链接直接点击的方式请求
ajax是无法直接导出excel的,因为ajax的返回值只能是字符流,而导出excel是后台往浏览器中写入二进制的字节流。
composer.json 中写的 phpexcel 版本.
"phpoffice/phpexcel": "1.8.*"//
前台代码
<button type="button" style="margin-left: 16px" class="btn btn-rounded btn-3d btn-light" onclick="exported()">导出</button>
<script>
function exported(){
title = $("#title").val();
type = $("#type").val();
industry = $("#industry").val();
window.location = "/firm/firmgy/exp.html?title="+title+"&type="+type+"&industry="+industry;
}
</script>
后台代码
use think\facade\Request;
use think\facade\Session;
/*导出数据*/
public function exp(){
if(!(Session::get('USER_INFO_SESSION'))){
return $this->redirect(url('/login'));
}
$list =Db::table('yongjun_firmgy')->selectOrFail();
$xlsName = "优质企业"; // 文件名
$xlsCell = [ // 列名
['id', '序号'],
['firmname', '标题'],
['optdt', '添加时间']
];// 表头信息
$this->downloadExcel($xlsName,$xlsCell,$list);
}
protected function downloadExcel($expTitle, $expCellName, $expTableData)
{
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $expTitle;
$cellNum = count($expCellName);// 单元格长度
$dataNum = count($expTableData);
$objPHPExcel = new \PHPExcel();// 引入库
$cellName = [
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
];
$objPHPExcel->getActiveSheet(0)
->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格为表头
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle);// 设置表头单元格
for ($i = 0; $i < $cellNum; $i++) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($cellName[$i] . '2', $expCellName[$i][1]);
// 设置列
}
// Miscellaneous glyphs, UTF-8 循环写入数据
for ($i = 0; $i < $dataNum; $i++) {
for ($j = 0; $j < $cellNum; $j++) {
$objPHPExcel->getActiveSheet(0)
->setCellValue($cellName[$j] . ($i + 3), $expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean();//这一步非常关键,用来清除缓冲区防止导出的excel乱码
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//"xls"参考下一条备注
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//"Excel2007"生成2007版本的xlsx,"Excel5"生成2003版本的xls 调用工厂类
return $objWriter->save('php://output');
}
觉得有用请点击呦

浙公网安备 33010602011771号