一、导致导出数据乱码问题解决方案:
1.1、前端在axios里面加入加入请求头:
responseType: 'blob',
说明:responseType: 'blob' 是一个常用于 XMLHttpRequest 或 fetch API 的选项,它指定了响应的类型。当设置为 'blob' 时,这意味着预期服务器返回的是一个二进制大对象(Blob),通常用于处理二进制数据,如文件下载。
1.2、后端在查询数据后加入清除
ob_end_clean(); // Added by me ob_start(); // Added by me
说明:ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲,ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区而不会立刻输出
二、导出Excel例子
1、HTML部分代码:
<template> <div> <el-button type="warning" @click="exportExcel" size="small">导出</el-button> <div> <template>
2、Vue前端代码:实现点击按钮下载Excel,使用axios请求下载:
<script> import axios from 'axios'; export default { //导出功能 async exportExcel(){ axios.get('/api/appointment/exportExcel', { token: window.localStorage.getItem('token'), // 设置认证令牌 responseType: 'blob', }) .then(response => { // 处理响应,例如下载文件 const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'example.xls'); document.body.appendChild(link); link.click(); }) .catch(error => { console.error('导出 Excel 失败:', error); }); }, } </script>
3、laravel后端代码:后端实现导出excel功能
<?php pubilc function exportExcel(){ $res = Appointment::where($where)->orderBy('id', 'desc')->get()->toArray(); $objPHPExcel = new \PHPExcel(); $objPHPExcel->createSheet(); //创建新的内置表 $objPHPExcel->setActiveSheetIndex(); //吧新创建的sheet设定为当前活动sheet $objPHPExcel->getActiveSheet()->freezePane('A2');//锁定这个单元格,则该单元格所有的左边区域和上方区域都会被锁定,也就是不受滚动条的影响,像浮在那一样,这就是锁定单元格的原理。所以锁定A2就是冻结第一行了 //设置背景颜色 $objPHPExcel->getActiveSheet()->getStyle('A1:B1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('D9FFC125'); $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20); $objSheet=$objPHPExcel->getActiveSheet(); //获取当前活动sheet $objSheet->setTitle("预约记录");//给当前活动sheet设置名称 $objSheet->setCellValue('A1','姓名')->setCellValue('B1','手机号'); $j=2; foreach($res as $key=>$val){ $objSheet->setCellValue('A'.$j,$val['yy_name'])->setCellValue('B'.$j,$val['yy_tel']); $j++; } ob_end_clean(); // Added by me ob_start(); // Added by me // 设置HTTP响应头,以便浏览器可以识别Excel文件 header('Content-Type: application/vnd.ms-excel;charset=UTF-8'); header('Content-Disposition: attachment;filename="example.xls"'); header('Cache-Control: max-age=0'); // 创建 Excel writer 对象 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // 直接输出到浏览器 $objWriter->save('php://output'); exit; } ?>
文章评论(0)