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
}
}
如何“读取”每一行上的图像(如果有的话)并将其保存在磁盘中?
不幸的是,绘图(图像)不存在于单元格中,它们存在于工作表中,因此从行中获取图像有点棘手。
我认为 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.
}
}