laravel如何导出excel中带有图片?

我用maatwebsite/excel包里面的Drawing类将图片导出到excel
但是我不想要图片的地址,只想要图片即可
代码是这样的

public function registerEvents(): array
    {
        return [
            AfterSheet::class => function(AfterSheet $event) {
                $data = $this->data;
                $rowIndex = 2;
                foreach ($data as $row) {
                    $imagePath = public_path($row['picture']);
                    if (file_exists($imagePath)) {
                        $drawing = new Drawing();
                        $drawing->setPath($imagePath);
                        $drawing->setHeight(50);
                        $drawing->setCoordinates('E'. $rowIndex);
                        $drawing->setWorksheet($event->sheet->getDelegate());
                    }
                    $rowIndex++;
                }
            },
        ];
    }

结果就是既有图片又有图片地址在,如何不要那个文本
laravel如何导出excel中带有图片?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

刚写的一个需求这是一个封装的导出类,最后的 drawings 是导出时添加图片,正常的话把你那个单元格填充信息去掉为空然后把图片插入即可

use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Events\AfterSheet;
use Maatwebsite\Excel\Events\BeforeExport;
use Maatwebsite\Excel\Concerns\WithDrawings;
use PhpOffice\PhpSpreadsheet\Exception;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
//省略部分格式代码.....
 public function map($row): array
    {
        $package = Package::find($row->package_id);
        return [
            $row->id,
            $package?$package->name:'套餐不存在或已删除',
            $row->intercept_status?Orders::$interceptStatusTexts[$row->intercept_status]:'暂无',
            $row->intercept_msg,
            $row->api_sync?Orders::$apiSyncTexts[$row->api_sync]:'暂无',
            $row->api_valid?Orders::$apiValidTexts[$row->api_valid]:'暂无',
            $row->api_lock,
            "\t".$row->api_order_no,
            "\t".$row->business_order_no,
            "\t".$row->order_no,
            $row->status,
            "\t".$row->phonenum,
            $row->contact,
            "\t".$row->mobile,
            "\t".$row->iden_card_id,
            $row->iden_card_name,
            $row->open_status?Orders::$openStatusTexts[$row->open_status]:'暂无',
            $row->open_message,
            $row->express_status?Orders::$expressStatusTexts[$row->express_status]:'暂无',
            "\t".$row->express_no,
            $row->express_name,
            //证件照
            '',
            '',
            '',
            $row->express_address,
            $row->remark,
            $row->active_status?Orders::$activeStatusTexts[$row->active_status]:'',
            $row->active_time,
            $row->first_charge_status?Orders::$firstChargeStatusTexts[$row->first_charge_status]:'',
            $row->first_charge_time,
            $row->first_charge_amount,
            $row->created_at,
            $row->updated_at
        ];
    }

public function drawings()
    {
        $drawings = [];
        $rowIndex = 2; // Start from the second row (first row is for headings)

        foreach ($this->rowsWithImages as $row) {
            if ($row->idcard_front) {
                $drawing = new Drawing();
                $drawing->setName('证件照正面');
                $drawing->setDescription('证件照正面');
                $drawing->setPath(public_path($row->idcard_front));
                $drawing->setHeight(50);
                $drawing->setCoordinates('V' . $rowIndex);
                $drawings[] = $drawing;
            }

            if ($row->idcard_back) {
                $drawing = new Drawing();
                $drawing->setName('证件照反面');
                $drawing->setDescription('证件照反面');
                $drawing->setPath(public_path($row->idcard_back));
                $drawing->setHeight(50);
                $drawing->setCoordinates('W' . $rowIndex);
                $drawings[] = $drawing;
            }

            if ($row->user_with_idcard) {
                $drawing = new Drawing();
                $drawing->setName('手持证件照');
                $drawing->setDescription('手持证件照');
                $drawing->setPath(public_path($row->user_with_idcard));
                $drawing->setHeight(50);
                $drawing->setCoordinates('X' . $rowIndex);
                $drawings[] = $drawing;
            }

            $rowIndex++;
        }

        return $drawings;
    }
7个月前 评论
讨论数量: 8

excel 解压后是个目录,如果有图片附件的话就是在这个目录下的这个文件路径

7个月前 评论
donggan (楼主) 7个月前

早上刚写了同样的需求,一样的代码但我的并没有文本...是不是其他地方导致的?

7个月前 评论
donggan (楼主) 7个月前

之前写过类似的,但是列宽可能会不生效。 file

7个月前 评论
SiuhoY (作者) 7个月前
donggan (楼主) 7个月前

刚写的一个需求这是一个封装的导出类,最后的 drawings 是导出时添加图片,正常的话把你那个单元格填充信息去掉为空然后把图片插入即可

use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Events\AfterSheet;
use Maatwebsite\Excel\Events\BeforeExport;
use Maatwebsite\Excel\Concerns\WithDrawings;
use PhpOffice\PhpSpreadsheet\Exception;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
//省略部分格式代码.....
 public function map($row): array
    {
        $package = Package::find($row->package_id);
        return [
            $row->id,
            $package?$package->name:'套餐不存在或已删除',
            $row->intercept_status?Orders::$interceptStatusTexts[$row->intercept_status]:'暂无',
            $row->intercept_msg,
            $row->api_sync?Orders::$apiSyncTexts[$row->api_sync]:'暂无',
            $row->api_valid?Orders::$apiValidTexts[$row->api_valid]:'暂无',
            $row->api_lock,
            "\t".$row->api_order_no,
            "\t".$row->business_order_no,
            "\t".$row->order_no,
            $row->status,
            "\t".$row->phonenum,
            $row->contact,
            "\t".$row->mobile,
            "\t".$row->iden_card_id,
            $row->iden_card_name,
            $row->open_status?Orders::$openStatusTexts[$row->open_status]:'暂无',
            $row->open_message,
            $row->express_status?Orders::$expressStatusTexts[$row->express_status]:'暂无',
            "\t".$row->express_no,
            $row->express_name,
            //证件照
            '',
            '',
            '',
            $row->express_address,
            $row->remark,
            $row->active_status?Orders::$activeStatusTexts[$row->active_status]:'',
            $row->active_time,
            $row->first_charge_status?Orders::$firstChargeStatusTexts[$row->first_charge_status]:'',
            $row->first_charge_time,
            $row->first_charge_amount,
            $row->created_at,
            $row->updated_at
        ];
    }

public function drawings()
    {
        $drawings = [];
        $rowIndex = 2; // Start from the second row (first row is for headings)

        foreach ($this->rowsWithImages as $row) {
            if ($row->idcard_front) {
                $drawing = new Drawing();
                $drawing->setName('证件照正面');
                $drawing->setDescription('证件照正面');
                $drawing->setPath(public_path($row->idcard_front));
                $drawing->setHeight(50);
                $drawing->setCoordinates('V' . $rowIndex);
                $drawings[] = $drawing;
            }

            if ($row->idcard_back) {
                $drawing = new Drawing();
                $drawing->setName('证件照反面');
                $drawing->setDescription('证件照反面');
                $drawing->setPath(public_path($row->idcard_back));
                $drawing->setHeight(50);
                $drawing->setCoordinates('W' . $rowIndex);
                $drawings[] = $drawing;
            }

            if ($row->user_with_idcard) {
                $drawing = new Drawing();
                $drawing->setName('手持证件照');
                $drawing->setDescription('手持证件照');
                $drawing->setPath(public_path($row->user_with_idcard));
                $drawing->setHeight(50);
                $drawing->setCoordinates('X' . $rowIndex);
                $drawings[] = $drawing;
            }

            $rowIndex++;
        }

        return $drawings;
    }
7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!