php 导出excel 带图片

php 复制代码
    /**
     * 导出
     */
    public function export()
    {
        $where = [];
        $fullname = $this->request->param("fullname");
        $status = $this->request->param("status");

        $start_time = $this->request->param("start_time");
        $end_time = $this->request->param("end_time");

        $fullname && $where[] = ['partner.fullname','LIKE',"%{$fullname}%"];
        $status && $where[] = ['feedback.status','=',$status];

        if ($start_time != '' && $end_time != ''){
            $where[] = ['feedback.create_time','between',[$start_time, $end_time]];
        }


        $fields = [
            "subuser.user_name",
            "subuser.partner_id",
            "feedback.feedback_id",
            "feedback.text",
            "feedback.files",
            "feedback.status",
            "feedback.create_time",
            "feedback.reply_time",
            "feedback.reply_text",
            "partner.fullname",
        ];
        $list = $this->model->alias("feedback")
            ->leftjoin("subuser subuser","feedback.subuser_id = subuser.subuser_id")
            ->leftjoin("partner partner","partner.partner_id = subuser.partner_id")
            ->where($where)
            ->field($fields)
            ->order('feedback.feedback_id DESC')
            ->select()
            ->toArray();
        
        //开始写入EXCEL
        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load(root_path() . 'public/tpl/意见反馈导出模板.xls');//读取指定路径下的模板
        $worksheet = $spreadsheet->getActiveSheet();//指向激活的工作表
        $worksheet->setTitle('Product catalog');
        $count=count($list);
        $worksheet->insertNewRowBefore(3,$count-1);



        $startline=2;
        //遍历表单数据
        $path = root_path() . 'public/tmpxls/shop_feedback/';
        @mkdir($path);

        foreach($list as $k=>$v){
            $line=$k+$startline;

            // 判断是不是图片
            $img_url = $v['files_text'][0] ?? '';
            $check_img = $this->model->isImageURL($img_url);

            if ($check_img == true){

                $fileInfo = pathinfo($img_url);
                $file =  $fileInfo['filename'] .'.'.$fileInfo['extension'];

                //下载图片到本地
                if (file_exists( $path.$file) === false) {
                    copy($img_url, $path.$file);
                }

                if (!file_exists($path.$file)) {
                    // 跳过无效图片
                    continue;
                }

                //下载图片到本地
                if(file_exists($path.$file)===true){

                    $drawing =new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
                    $drawing->setName('Image');
                    $drawing->setDescription('Image');
                    $drawing->setPath($path.$file); // 设置图片路径
                    $drawing->setWidth(80); // 设置图片宽度
                    $drawing->setHeight(80); // 设置图片高度
                    $drawing->setCoordinates('E'.$line); // 指定单元格
                    $drawing->setOffsetX(10); // 设置横向偏移
                    $drawing->setOffsetY(10); // 设置纵向偏移
                    $drawing->setWorksheet($spreadsheet->getActiveSheet());
                }

            }

            //插入行项目
            $worksheet->getCell('A'.$line)->setValue(++$k);
            $worksheet->getCell('B'.$line)->setValue($v['fullname']);
            $worksheet->getCell('C'.$line)->setValue($v['user_name']);
            $worksheet->getCell('D'.$line)->setValue($v['text']);
            $worksheet->getCell('F'.$line)->setValue($v['create_time']);
            $worksheet->getCell('G'.$line)->setValue($v['status_text']);
            $worksheet->getCell('H'.$line)->setValue($v['reply_text']);



        }

        $filename = date("YmdHis").'意见反馈';


        //下载文档
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$filename.'.Xlsx');
        header('Cache-Control: max-age=0');
        $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
        return $writer->save('php://output');





    }

文件模板

相关推荐
bzmK1DTbd9 小时前
Git版本控制:Java项目中的分支管理与合并策略
java·开发语言·git
Rust研习社9 小时前
为什么 Rust 没有空指针?
开发语言·后端·rust
kyriewen119 小时前
WebAssembly:前端界的“外挂”,让C++代码在浏览器里跑起来
开发语言·前端·javascript·c++·单元测试·ecmascript
其实防守也摸鱼11 小时前
CTF密码学综合教学指南--第九章
开发语言·网络·python·安全·网络安全·密码学·ctf
砚底藏山河11 小时前
Python量化开发:2026最佳实时股票数据API接口推荐与对比
开发语言·windows·python
AlunYegeer12 小时前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端
VBAMatrix12 小时前
deepseek-v4正式接入Excel,一键生成财务分析报告
word·excel·审计·财务分析·deepseek·会计师事务所·tb工具箱
学网安的肆伍12 小时前
【043-WEB攻防篇】PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类
sql·安全·php
hixiong12312 小时前
C# OpenvinoSharp使用DINOv2模型进行图像相似度计算
开发语言·c#
DFT计算杂谈13 小时前
自动化脚本一键绘制三元化合物相图
java·运维·服务器·开发语言·前端·python·自动化