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 ...
随机推荐
- ORACLE(系统表student) 基本与深入学习
(一).首先我们先创建student表(系统有的可以跳过往下看)没有直接复制运行即可. create table student(sno varchar2(3) not null, --学号sname ...
- python 参考知识点
本笔记仅作为有编程基础的童鞋在学习python时的参考资料,不适合零基础小白,并假设在你的电脑上已经正确安装了python环境,windows下需要配置环境变量,可以在终端窗口中执行以下命令 set ...
- Java项目接入sso单点登录
最近在落地cat(java开发的一款开源监控系统)接入公司的内部项目,其中有项需求是接入公司的sso单点登录系统.研究了公司之前java项目接入sso系统,大部分是采用spring框架,然后依赖spr ...
- WPF基于3D对象捕获鼠标点击事件
ModelUIElment3DUIElment3D是.NET3.5新增的类,替代了ModelVisual3D.ModelVisual3D有2个派生类ModelUIElment3D和ContainerU ...
- JVM史上最全实践优化没有之一
JVM史上最全优化没有之一 1.jvm的运行参数 1.1 三种参数类型 1.1.1 -server与-clinet参数 2.1 -X参数 2.1.1 -Xint.-Xcomp.-Xmixed 3.1 ...
- 03_javaSE面试题:类初始化和实例初始化
题目 下面代码运行的结果是什么? Father 类 /** * @author kevin * @date 2019/7/8 15:48 */ public class Father { privat ...
- 第七章 手动部署Fisco Bcos 区块链并完成新增群组,在原有群组中新增机构
鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 目标 1.新增群组搭建完整联盟链 2.根据群组新 ...
- django基础知识之QueryDict对象:
QueryDict对象 定义在django.http.QueryDict request对象的属性GET.POST都是QueryDict类型的对象 与python字典不同,QueryDict类型的对象 ...
- Linux部署项目常用命令
前言:一般项目都会使用阿里云等服务器作为云服务器.此时必不可免会使用到一系列常用的命令.这里我整合一下常用的命令 1.一般链接阿里云服务器常用的的是xshell跟xftp. 下载路径:https:// ...
- Java项目案例之---常用工具类练习
常用工具类练习 1. 请根据控制台输入的特定日期格式拆分日期,如:请输入一个日期(格式如:**月**日****年),经过处理得到:****年**月**日 import java.util.Scanne ...