一、导致导出数据乱码问题解决方案:
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;
}
?>
关于简忆
简忆诞生的故事



粤ICP备16092285号
文章评论(0)