最近项目中需要使用使用phpexcel生成表格,但是在由网页导出excel时,文件的后缀总是会带上html。后来调试了半天发现,需要在header头输出之前使用ob_end_clean( )去清除php缓冲区中的内容。因为在herder头输出之前,php是不能有任何输出的,哪怕是一个空格,一旦有了输出,你设置的php header头就无效了,因为此时的header头信息早已经固定。
输出excle时出现乱码的情况也是用这种方式解决。
/**
* 下载excel表格
*/
public function down_excel()
{
$params = $_get;
$filename = $params['cname'] . '收银明细列表' . date('y-m-d');
$objphpexcel = new \phpexcel();
//设置表头信息
$letter = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l');
$excel_column = array(
'id' => 订单号,
'dt' => 交易时间,
'money' => 金额,
'status' => 交易状态,
'pay_type' => 支付渠道,
'device' => 终端号,
'operator' => 收银员,
'pay_id' => 渠道流水号,
'client_name' => 商户名称,
'pay_scense' => 支付场景,
'operate_fee' => 手续费,
'no' => 小票单号,
);
$new_letter = [];
$new_excel_column = [];
foreach ($params['act_name'] as $k => $d) {
$new_letter[$d] = $letter[$k];
$new_excel_column[$d] = $excel_column[$d];
}
foreach ($new_excel_column as $k => $d) {
//设置行宽自动调整
$objphpexcel->getactivesheet()->getcolumndimension($new_letter[$k])->setwidth(12);
$objphpexcel->getactivesheet()->setcellvalue($new_letter[$k] . '1', $d);
}
//填充表格信息
$data['rows'] = [];
foreach ($params['down_class'] as $item) {
switch ($item) {
case 'pay_success':
$params['dm_status'] = 2;
break;
case 'refund_success':
$params['dm_status'] = 4;
break;
case 'pay_fail':
$params['dm_status'] = 3;
break;
case 'pay_undefined':
$params['dm_status'] = 5;
break;
}
$ret = $this->getdata($params);
$data['rows'] = array_merge($data['rows'], $ret['rows']);
}
$total = 0;
if (!empty($data['rows'])) {
foreach ($data['rows'] as $k => $d) {
$i = $k + 2;
foreach ($new_letter as $key => $item) {
//填充数据
$objphpexcel->getactivesheet()->setcellvalue($item . $i, strip_tags($d[$key]));
}
$total += strip_tags($d['money']);
}
}
$index = count($data['rows']) + 2;
$objphpexcel->getactivesheet()->mergecells(a{$index}:b{$index});
$objphpexcel->getactivesheet()->setcellvalue('a' . $index, '合计');
$objphpexcel->getactivesheet()->setcellvalue('c' . $index, $total);
//保存表格版本格式
$objwriter = \phpexcel_iofactory::createwriter($objphpexcel,excel2007);
//下载表格
ob_end_clean(); //关闭缓冲区之后再输出header头,在header设置之前,可能某个地方有了输出,导致content-type的类型为text/html,所以输出的表格后缀才会是html
header('content-type: application/octet-stream');
header(content-disposition: attachment; filename=\{$filename}.xlsx\);
$objwriter->save(php://output);
}
相关推荐:
phpexcel在linux系统报错如何解决
tp3.2中phpexcel导入excel方法分享
phpexcel如何实现合并与拆分单元格
以上就是tp5中phpexcel生成表格实例分享的详细内容。