최근 프로젝트에서는 테이블을 생성하기 위해 phpexcel을 사용해야 하지만 웹 페이지에서 Excel을 내보낼 때 파일의 접미사는 항상 html입니다. 오랫동안 디버깅한 후에 헤더가 출력되기 전에 PHP 버퍼의 내용을 지우려면 ob_end_clean()을 사용해야 한다는 것을 알았습니다. Herder 헤더가 출력되기 전에는 PHP에서 공백조차 출력할 수 없기 때문에 일단 출력이 되면 이때 헤더 정보가 이미 수정되었기 때문에 설정한 PHP 헤더는 유효하지 않게 됩니다.
엑셀 출력시 글자가 깨져 나오는 문제도 이 방법으로 해결했습니다.
/** * 下载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"); }
관련 권장 사항:
Linux 시스템에서 phpexcel 오류를 해결하는 방법
TP3.2의 phpexcel에서 Excel을 가져오는 방법 공유
위 내용은 tp5의 phpexcel에서 테이블 생성 공유 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!