讨论数量: 
            
            
    
            @ltw_phper 我最近遇到同样的需求,前期设计实现方案时写了一个 demo,有些细节还待完善,仅供参考。
<?php
...
public function import(string $file_path)
{
    $list = [];
    Excel::selectSheetsByIndex(0)->load(
        $file_path,
        function ($reader) use (&$list) {
            $list = $this->appendImageForSheetData(
                $reader->getSheet(0),
                $reader->get()->toArray(),
                '商品图片'
            );
        }
    );
    ...
}
...
/**
 * 为 excel 工作表数据集追加图片列
 *
 * @param PHPExcel_Worksheet $excel_worksheet
 * @param array $sheet_data
 * @param string $image_column_name
 * @param string|null $save_dir
 *
 * @return array
 */
protected function appendImageForSheetData(
    PHPExcel_Worksheet $excel_worksheet,
    array $sheet_data,
    string $image_column_name,
    string $save_dir = null
): array {
    $save_dir = $save_dir ?? 'excel_image/' . date('Ymd') . '/' ;
    //从 excel 读取器中读取图片集合,依次循环每张图片,将其保存到磁盘后,再把图片保存路径追加到 excel 数据集中
    foreach ($excel_worksheet->getDrawingCollection() as $drawing) {
        if (!$drawing instanceof PHPExcel_Worksheet_Drawing) {
            continue;
        }
        //确定图片所在的行号
        preg_match('/\d+$/', $drawing->getCoordinates(), $row);
        $row = ($row[0] ?? 0) - 2;
        if (!isset($sheet_data[$row])) {
            continue;
        }
        //获取图片资源并保存到磁盘
        $file_name = Str::random(32). '.'. $drawing->getExtension();
        $file_save_path = $save_dir . $file_name;
        if (!Storage::disk('local')
                    ->put(
                        $file_save_path,
                        file_get_contents($drawing->getPath())
                    )
        ) {
            continue;
        }
        //将图片路径追加到 excel sheet 数据集
        $sheet_data[$row][$image_column_name] = $file_save_path;
    }
    return $sheet_data;
}
 
           laravel176 的个人博客
 laravel176 的个人博客
        

 
  
                     
                     
             
             
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: