Laravel,从excel文件中提取图像并将其保存在光盘中

问题描述 投票:0回答:1

Laravel v10.47.0 PHP v8.2.13 目前使用 maatwebsite/excel

用户将通过 Web 表单上传 Excel 文件,其中包含要插入数据库表中的信息。包含 5 栏:代码、概念、价格、数量、照片(可选)。每一行都是一条记录(包括照片)

我可以毫无问题地获取前 4 列,但照片部分我需要提取图像并保存在光盘中以供稍后使用。

目前我有这个代码:

$sheets = Excel::toArray(new RecordImport, $tempPathOfExcelFile);
foreach ($sheets as $sheet) {
    foreach ($sheet as $idx => $row) {
        // validation and insert record
    }
}

如何“读取”每一行上的图像(如果有的话)并将其保存在磁盘中?

php laravel maatwebsite-excel
1个回答
0
投票

不幸的是,绘图(图像)不存在于单元格中,它们存在于工作表中,因此从行中获取图像有点棘手。

我认为 laravel-excel 将其方法调用委托给 PhpSreadsheet 的 Worksheet 类,所以这应该有点作用。

PhpOffice\PhpSpreadsheet\Worksheet\Drawing
公开了一个
getCoordinates
方法,该方法应返回单元格坐标(例如,
"À2"

$sheets = Excel::toArray(new RecordImport, $tempPathOfExcelFile);
foreach ($sheets as $sheet) {
    $drawings = $sheet->getDrawingCollection()->getArrayCopy(); // get an array instead of an ArrayObject so we can use array_filter on it.

    foreach ($sheet as $idx => $row) {
       // Assuming photo is in the fifth column (E)
       $drawing = array_filter($drawing_array, fn ($d) => $d->getCoordinates() === "E{$row}");
       // follow the PhpSpreadsheet documentation linked below from here.
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.