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 ...
随机推荐
- 利用Shell开发MySQL的启动脚本
MySQL实例部署情况 01:MySQL程序安装目录:/data/apps/mysql 02:MySQL实例3306的配置文件为:/data/mysql/3306/my.cnf 03:MySQL实例3 ...
- Protobuf 小试牛刀
本文以PHP为例. 环境: CentOS 6.8 proto 3.8 PHP 7.1.12 PHP protobuf扩展 3.8.0 go1.12.5 linux/amd64 本文示例仓库地址: ht ...
- Mybatis中的collection和association一关系
collection 一对多和association的多对一关系 学生和班级的一对多的例子 班级类: package com.glj.pojo; import java.io.Serializable ...
- kubernetes实战篇之dashboard搭建
系列目录 kubernetes dashboard是kubernetes官方提供的web管理界面,通过dashboard可以很方便地查看集群的各种资源.以及修改资源编排文件,对集群进行扩容操作,查看日 ...
- 每周分享五个 PyCharm 使用技巧(五)
文章首发于 微信公众号:Python编程时光 大家好,这是本系列 PyCharm 的高效使用技巧的第五篇.按照惯例,本次还是分享 5 个. 本系列前四篇如下,若还没看的,你可以点击查阅 21. 随处折 ...
- Python自学day-3
一.集合 集合元素不会重复,而且是无序的. 定义集合: set_1 = {1,2,3,4,5} set求交集(intersection): set1 = set([1,2, ...
- ZooKeeper学习之路(三)—— Zookeeper常用Shell命令
一.节点增删改查 1.1 启动服务和连接服务 # 启动服务 bin/zkServer.sh start #连接服务 不指定服务地址则默认连接到localhost:2181 zkCli.sh -serv ...
- Linux CentOS删除或重命名文件夹和文件的办法
Linux.CentOS操作系统下如何删除和重命名文件夹呢?办法如下: 一.Linux.CentOS下重命名文件和文件夹 mv:move 用移动文件命令就可以了,因为linux系统没有专门的重命名命令 ...
- logrotate切割nginx日志
1 配置 使用系统自带的logrorate来切个nginx日志,位于/usr/sbin/logrotate 假设服务器上有两个网站的nginx配置分别如下: 去除其它配置信息,只保留了日志相关 A网站 ...
- kubernetes实战之consul篇及consul在windows下搭建consul简单测试环境
consul是一款服务发现中间件,1.12版本后增加servicemesh功能.consul是分布式的,可扩展的,高可用的根据官方文档介绍,目前已知最大的consul集群有5000个节点,consul ...