文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

解决TP6使用PHPExcel导出excel文件时报错

2023-10-27 14:38

关注

先来看操作步骤和展示结果:

 你是不是也遇到过这种情况?

原因是什么?

很简单,TP6要求PHP版本不能低于7.4.0,但PHPExcel自7.2版本之后已经基本不适用了,所以,如果你网站使用的是7.2之前的版本,那么使用PHPExcel导出功能是没有问题的,但是,超过7.2的版本就会遇到这种问题。

很多人也通过搜索找了网上的一堆关于解决这个问题的办法:

有的说把PHPExcel库文件里的break注释掉的

有的说把Excel5改成Excel2007的……各种说法都有,

他们的说法我也都挨个的测试了,没有一个管用的。

通过各种求证资料和搜索,找到了一种办法,那就是替换PHPExcel,彻底更换新的sdk执行导出。那就是用phpSpreadsheet。

一:首先,下载sdk。

使用composer安装sdk

composer require phpoffice/phpspreadsheet

如果composer安装不成功的话,可以在本地新建个空文件夹,然后打开命令行窗口,使用composer下载到这个空文件夹里,然后再把sdk文件复制到项目合适的路径下。

文件目录是这样的:

二:写公共导出方法:

    function exportExcel($fileName = "myData", $headArr = [], $data = [],$cellName,  $suffix = 'xls'){        @ini_set('memory_limit', '2048M');        @set_time_limit(0);        if (!$headArr || !$data || !is_array($data)) {            return false;        }        require_once( CMF_ROOT."sdk/phpoffice/autoload.php");        $fileName   .= "_" . date("YmdHis");// 文件名称连接上相应的时间戳        $spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();        $sheet = $spreadsheet->getActiveSheet();        $cellNum = count($headArr);        $dataNum = count($data);        for($i=0;$i<$cellNum;$i++){            $sheet->setCellValue($cellName[$i].'1', $headArr[$i][1]);        }        for($i=0;$i<$dataNum;$i++){            for($j=0;$j<$cellNum;$j++){                $sheet->setCellValue($cellName[$j].($i+2), filterEmoji( $data[$i][$headArr[$j][0]] ) );            }        }        // 重命名表(UTF8编码不需要这一步)        $fileName = iconv("utf-8", "gbk//IGNORE", $fileName);        // 清理缓存        ob_end_clean();        if ($suffix == 'xlsx') {            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');            $class = "\PhpOffice\PhpSpreadsheet\Writer\Xlsx";        } elseif ($suffix == 'xls') {            header('Content-Type:application/vnd.ms-excel');            $class = "\PhpOffice\PhpSpreadsheet\Writer\Xls";        }        header('Content-Disposition: attachment;filename="' . $fileName . '.' . $suffix . '"');        header('Cache-Control: max-age=0');        $writer = new $class($spreadsheet);        $writer->save('php://output');        // 删除清空 释放内存        $spreadsheet->disconnectWorksheets();        unset($spreadsheet);    }

三:调用导出方法:【可以根据自己实际项目需要更换字段多少和字段名称,但请求Excel导出时的数据格式不要变】

        $xlsName  = "充值记录";        $xlsData=Db::name("charge_user")            ->field('id,uid,money,coin,coin_give,orderno,type,trade_no,status,addtime')            ->where($map)            ->order('id desc')->select()            ->toArray();        if(empty($xlsData)){            $this->error("数据为空");        }        foreach ($xlsData as $k => $v) {            $userinfo=getUserInfo($v['uid']);            $xlsData[$k]['user_nickname']= $userinfo['user_nickname']."(".$v['uid'].")";            $xlsData[$k]['addtime']=date("Y-m-d H:i:s",$v['addtime']);             $xlsData[$k]['type']=$this->getTypes($v['type']);            $xlsData[$k]['status']=$this->getStatus($v['status']);        }                $cellName = array('A','B','C','D','E','F','G','H','I','J');        $xlsCell  = array(            array('id','序号'),            array('user_nickname','会员'),            array('money','人民币金额'),            array('coin','兑换点数'),            array('coin_give','赠送点数'),            array('orderno','商户订单号'),            array('type','支付类型'),            array('trade_no','第三方支付订单号'),            array('status','订单状态'),            array('addtime','提交时间')        );        exportExcel($xlsName,$xlsCell,$xlsData,$cellName);

四:导出效果:

导出方法想要扩展代码的话,可以参考下面的链接:

PhpSpreadsheet中文文档 | 基础Spreadsheet开发使用示例 - 互联网笔记

使用 phpSpreadsheet 导出 Excel 完美支持超出26列 和 使用php原生导出 CSV 格式_李某人y的博客-CSDN博客_phpspreadsheet导出csv

详解PhpSpreadsheet设置单元格_wbj16116的博客-CSDN博客

来源地址:https://blog.csdn.net/salestina/article/details/126441761

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯