thinkphp phpexcel导出返回乱码
今天做了一个excel文件导出的功能 可是无论怎么改网上怎么搜答案什么缓冲啊charset=UTF-8'a都不起效
<?php
namespace app\admin\controller;
use cmf\controller\AdminBaseController;
use think\Db;
use think\Loader;
class DownController extends AdminBaseController
{
/**
* 将数据库数据导出为excel文件
*/
function downLoadExcle($list)
{
// $user = Db::query("select * from user");
Loader::import('PHPExcel.PHPExcel');
Loader::import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
Loader::import('PHPExcel.PHPExcel.Reader.Excel2007');
$objPHPExcel = new \PHPExcel();
$arr = json_decode(input('arr'));
//设置每列的标题
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '序号')
->setCellValue('B1', '型号')
->setCellValue('C1', '外箱')
->setCellValue('D1', '中盒')
->setCellValue('E1', 'sn')
->setCellValue('F1', '追溯码')
->setCellValue('G1', '口味')
->setCellValue('H1', '套装')
->setCellValue('I1', '对应出库单号')
->setCellValue('J1', '出库时间')
->setCellValue('K1', '备注');
//存取数据 这边是关键
foreach ($list as $k => $v) {
$num = $k + 2;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A' . $num, $v['id'])
->setCellValue('B' . $num, $v['name'])
->setCellValue('C' . $num, $v['p_bar_code'])
->setCellValue('D' . $num, $v['z_bar_code'])
->setCellValue('E' . $num, $v['u_bar_code'])
->setCellValue('F' . $num, $v['back'])
->setCellValue('G' . $num, $v['flavor'])
->setCellValue('H' . $num, $v['suit'])
->setCellValue('I' . $num, $v['order_code'])
->setCellValue('J' . $num, $v['create_time'])
->setCellValue('K' . $num, $v['content']);
}
ob_end_clean();
$title = '我的文档';
$objPHPExcel->getActiveSheet()->setTitle($title);
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
$timestamp = time();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header('Content-Disposition: attachment;filename="links_out'.$timestamp.'.xls"');
header("Content-Transfer-Encoding:binary");
// header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
// header('Content-Disposition: attachment;filename="订单汇总表(' . date('Ymd-His') . ').xlsx"');
// header('Cache-Control: max-age=0');
Loader::import('PHPExcel.PHPExcel.Reader.Excel5');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
/**
* @param $filepathname
* 将excel文件导入数据库
* 使用iconv转换字符集防止文件名为中文时乱码
*/
function uploadExcel($filepathname)
{
$file_path =$filepathname;
$file_path = iconv('utf-8', 'gbk', $file_path);
Loader::import('PHPExcel.PHPExcel.Reader.Excel2007');
Loader::import('PHPExcel.PHPExcel.Reader.Excel5');
$PHPReader = new \PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($file_path)) {
$PHPReader = new \PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($file_path)) {
return;
}
}
$objPHPExcel = $PHPReader->load($file_path, $encode = 'utf-8');
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();//获取总行数
for ($i = 2; $i <= $highestRow; $i++) {
$data['name'] = $objPHPExcel->getActiveSheet()->getCell("B" . $i)->getValue();
$data['p_bar_code'] = $objPHPExcel->getActiveSheet()->getCell("C" . $i)->getValue();
$data['z_bar_code'] = $objPHPExcel->getActiveSheet()->getCell("D" . $i)->getValue();
$data['u_bar_code'] = $objPHPExcel->getActiveSheet()->getCell("E" . $i)->getValue();
$data['back'] = $objPHPExcel->getActiveSheet()->getCell("F" . $i)->getValue();
$data['flavor'] = $objPHPExcel->getActiveSheet()->getCell("G" . $i)->getValue();
$data['suit'] = $objPHPExcel->getActiveSheet()->getCell("H" . $i)->getValue();
$data['order_code'] = $objPHPExcel->getActiveSheet()->getCell("I" . $i)->getValue();
$data['create_time'] = $objPHPExcel->getActiveSheet()->getCell("J" . $i)->getValue();
$data['content'] = $objPHPExcel->getActiveSheet()->getCell("K" . $i)->getValue();
$allData[] = $data;
if($data['name']==''){
break;
}
}
return $allData;
}
/**
* 文件上传
*/
function uploadFile($file)
{
// 获取表单上传文件 例如上传了001.jpg
// $file = request()->file('avatar');
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->validate(['ext'=>'xlsx,xls,cvs'])->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
// echo $info->getPathname(); 获取文件路径
//将文件写入数据库
$send = $this->uploadExcel($info->getPathname());
return $send;
} else {
// 上传失败获取错误信息
echo $file->getError();
}
}
}
当代码没有错误的时候一定要看一下请求 如果你的请求是ajax 那么你的请求是要有返回值的 所以才会出现乱码
将请求换成普通请求 就会正常下载文件了 绝对有效 摸着我自己的良心说
thinkphp phpexcel导出返回乱码的更多相关文章
- thinkphp phpexcel导出
近期做一个项目涉及到商品信息的批量导出与导入,遂记录了下来,框架是tp框架3.2.3(tp5.0性质是一样的,无非是加载方法与所放目录不一样罢了),运用的是phpexcel,闲话不多说,上代码 1.首 ...
- PHPExcel 导出时乱码
今天遇到了个奇怪的问题..猜测应该是因为php文件的编码造成的,但是没有解决办法. 问题是,用PHPEXCEL导出文件的时候,相同的代码在一个文件中可以导出,在另一个文件中却不行.. 最后没有办法,只 ...
- phpexcel 导出xsl乱码
在header前面加上 ob_end_clean(); ob_end_clean();//清除缓冲区,避免乱码 header('Content-Type: application/vnd.ms-exc ...
- phpexcel导出后乱码或者是打不开文件必须修复的问题
百度了一下找到了解决办法,只要在header前面加上ob_end_clean();这句代码,清除缓冲区,这样就可以了,完美的解决了我的问题
- thinkphp中使用PHPEXCEL导出数据
thinkphp中导出二维数组到Excel 1.解决时间长度导致EXCEL出现###问题 2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型 代码如下: < ...
- 关于PHPExcel 导出下载表格,调试器响应乱码
PHPExcel导出表格是日常程序开发很常见的一功能,有些小伙伴千辛万苦把代码写好之后,运行一下结果发现浏览器没反应,表格下载不了或者表格乱码!!!像这种情况有三种解决方法: 1.在header 之前 ...
- 解决PHP下导出csv乱码小记
我们之前都是使用PHPexcel导出我们的一些数据的,由于Phpexcel对导出超出1万条数据会导至超时和内存暴涨,后来我们就改用数据导出成csv格式的. 相信很多朋友们在用PHP导出csv文件时都遇 ...
- PHPExcel导出excel文件
今天园子刚开,先来个货顶下,后续园丁qing我会再慢慢种园子的,希望大家多来园子逛逛. PHPExcel导出excel文件,先说下重要的参数要记住的东西 impUser() 导入方法 exportEx ...
- 利用PHPExcel导出excel 以及利用js导出excel
导出excel的方法output_excel需要依赖PHPExcel 导出csv的方法csv_export不需要 <?php /** * @author ttt */ class ExcelCo ...
随机推荐
- 前端视频转码flv->swf
在项目中本来是要用<video>标签插入视频,但此标签不支持flv格式,上网也是搜了很多,试了很久才成功(其他格式不是很清楚你们可以尝试看看) 所用技术 flach (Flvplayer. ...
- React躬行记(5)——React和DOM
React实现了一套与浏览器无关的DOM系统,包括元素渲染.节点查询.事件处理等机制. 一.ReactDOM 自React v0.14开始,官方将与DOM相关的操作从React中剥离,组成单独的rea ...
- 算法与数据结构基础 - 队列(Queue)
队列基础 队列具有“先进先出”的特点,用这个特点我们可以用它来处理时间序列相关或先后次序相关的问题,例如 LeetCode题目 933. Number of Recent Calls,时间复杂度O(1 ...
- Redis 密码设置和查看密码(二)
Redis 密码设置和查看密码 redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证. 1.初始化Redis密码: 在配置文件中有个参数: ...
- 还在被大妈灵魂拷问?使用Python轻松完成垃圾分类!
目录 0 环境 1 引言 2 思路 3 图像分类 4 总结 0 环境 Python版本:3.6.8 系统版本:macOS Mojave Python Jupyter Notebook 1 引言 七月了 ...
- Apache配置URL重定向
Apache配置URL重定向 修改/etc/httpd/conf/httpd.conf文件的内容 <Directory "/var/www"> AllowOverrid ...
- 2019.6.5 NOIP2014 day2 t2 寻找道路
我竟然一个人敲了NOIP提高组的t2? 题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直 ...
- 2018.7.16 题解 2018暑假集训之Roads-roads
题面描述 有标号为1--n的城市与单行道相连.对于每条道路有两个与之相关的参数:道路的长度以及需要支付的费用(用硬币的数量表示) 鲍勃和爱丽丝曾经生活在城市1.在注意到爱丽丝在他们喜欢玩的卡牌游戏中作 ...
- 十分钟教你理解TypeScript中的泛型
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://blog.bitsrc.io/understanding-generics-in-t ...
- ORACLE导入数据库详细步骤
登录PLSQL 点击然后打开命令窗口执行命令 创建表空间(红色字体是你需要创建表空间的地址,蓝色的是表空间大小) create temporary tablespace ZJY_TEMP tempfi ...