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');





    }

文件模板

相关推荐
warm3snow1 天前
AI 重塑产品管理工具:从 Jira 到智能体项目经理的终极演进
人工智能·ai·excel·项目管理·飞书·产品经理·jira·协同·tapd
ServBay1 天前
告别面条代码,PSL 5.0 重构 PHP 性能与安全天花板
后端·php
JaguarJack4 天前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo4 天前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack5 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo5 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack5 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay6 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954486 天前
CTF 伪协议
php
BingoGo9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php