在 ThinkPHP 5.1 中引入 PHPExcel(现在已被官方弃用,推荐使用 PhpSpreadsheet)时,可以按照以下步骤进行操作:
composer.json 文件中添加 PHPExcel(PhpSpreadsheet)的依赖项。找到 require 部分,并添加以下行: - "require": {
- "phpoffice/phpspreadsheet": "^1.0"
- }
运行命令 composer update 来安装依赖项。
composer require phpoffice/phpexcel 安装成功即可存在该目录/vendor/phpoffice/

3、引入类
use PHPExcel;
use PHPExcel_IOFactory;
-
- namespace app\api\controller;
-
- use Home\Controller\HeyteaApiController;
- use Home\Controller\TelMsgAliController;
- use think\Controller;
- use think\Db;
- use think\db\Connection;
- use think\facade\Cache;
-
- use PHPExcel;
- use PHPExcel_IOFactory;
-
- //引入两个类
-
-
- require_once '../php-sdk/youzanyun_open_sdk/open-sdk/vendor/autoload.php';
-
- class Index extends Controller
- {
- public function excel()
- {
- set_time_limit(0);//设置PHP超时时间
-
- $data_res = Db::name("hb_prize_record")
- ->where('pz_type', '实物')
- ->field("id,mark,is_get,get_time,tel,pz_title,pz_name,time,user_name,user_tel,user_procity,user_address,user_time")
- ->select();
- // return json($data_res);
- $path = dirname(__FILE__);//找到当前脚本所在路径
- $PHPExcel = new \PHPExcel();//实例化phpexcel
- $PHPSheet = $PHPExcel->getActiveSheet();
- $PHPSheet->setTitle("实物中奖信息");//设置表内部名称
- $PHPSheet->setCellValue("A1", "表编号")
- ->setCellValue("B1", "活动类型")
- ->setCellValue("C1", "是否领取(1-已领取,0-未领取)")
- ->setCellValue("D1", "领取时间")
- ->setCellValue("E1", "登录号码")
- ->setCellValue("F1", "奖项名称")
- ->setCellValue("G1", "中奖时间")
- ->setCellValue("H1", "收货姓名")
- ->setCellValue("I1", "收货电话")
- ->setCellValue("J1", "省市区")
- ->setCellValue("K1", "详细地址")
- ->setCellValue("L1", "提交时间");//表格数据
- $num = 2;
- //数据
- foreach ($data_res as $k => $v) {
- $PHPSheet->setCellValue("A" . $num, $v['id']);
- $PHPSheet->setCellValue("B" . $num, $v['mark']);
- $PHPSheet->setCellValue("C" . $num, $v['is_get']);
- $PHPSheet->setCellValue("D" . $num, $v['get_time']);
- // $v['now_time'] = date("Y-m-d H:i", $v['now_time']);
- $PHPSheet->setCellValue("E" . $num, $v['tel']);
- $PHPSheet->setCellValue("F" . $num, $v['pz_title']);
- $PHPSheet->setCellValue("G" . $num, $v['pz_name']);
-
- $PHPSheet->setCellValue("H" . $num, $v['time']);
- $PHPSheet->setCellValue("I" . $num, $v['user_name']);
- $PHPSheet->setCellValue("J" . $num, $v['user_procity']);
- $PHPSheet->setCellValue("K" . $num, $v['user_address']);
- $PHPSheet->setCellValue("L" . $num, $v['user_time']);
-
- $num++;
- }
- $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel, "Excel2007");//创建生成的格式
- header('Content-Disposition: attachment;filename="实物中奖信息.xlsx"');//下载下来的表格名
- header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
- $PHPWriter->save("php://output");//表示在$path路径下面生成demo.xlsx文件
- exit;
- }
- }
注意事项:
1、如果本地能导出excel并可以正常打开,但上传到服务器就不行,提示无法打开文件,试试在末尾加上 exit;如
- $PHPWriter->save("php://output");//表示在$path路径下面生成demo.xlsx文件
- exit;
2、如果是导出文件提示不存在,或者浏览器直接什么都不显示,这个时候考虑是不是没清空缓冲区;
缓冲区问题 解决方法:ob_end_clean() 在输出文件之前先清空缓冲
