phpSpreadsheet Artisan command 读取图片并另存为文件

php 读取execl图片并保存

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;

class Spreadsheet extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'spreadsheet:read {path}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'phpSpreadsheet 读取图片并保存';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     */
    public function handle()
    {
        //图片本地存储的路径
        $date = date('YmdHis');
        $imageFilePath = public_path("imports/{$date}/");
        //如果目录不存在则递归创建
        if (!file_exists($imageFilePath)) {
            mkdir($imageFilePath, 0755, true);
        }

        try {
            //包含图片的Excel文件
            $inputFileName = $this->argument('path');
            $reader = IOFactory::createReader('Xlsx');

            $objSpreadsheet = $reader->load($inputFileName);
            $sheetCount = $objSpreadsheet->getSheetCount();
//            $objWorksheet = $objSpreadsheet->getSheet(0);
            for ($i = 0; $i < $sheetCount; $i++) {
                $worksheet = $objSpreadsheet->getSheet($i);
                $data = $worksheet->toArray();
                $sheetNames = $objSpreadsheet->getSheetNames();
                //dump($sheetCount);
                //dump($data);
                foreach ($worksheet->getDrawingCollection() as $drawing) {
                    /**@var $drawing \PhpOffice\PhpSpreadsheet\Worksheet\Drawing* */
                    list($startColumn, $startRow) = Coordinate::coordinateFromString($drawing->getCoordinates());
                    $imageFileName = $sheetNames[$i] .'-'.$drawing->getCoordinates();

                    switch ($drawing->getExtension()) {
                        case 'jpg':
                        case 'jpeg':
                            $imageFileName .= '.jpg';
                            $source = imagecreatefromjpeg($drawing->getPath());
                            imagejpeg($source, $imageFilePath . $imageFileName);
                            break;
                        case 'gif':
                            $imageFileName .= '.gif';
                            $source = imagecreatefromgif($drawing->getPath());
                            imagegif($source, $imageFilePath . $imageFileName);
                            break;
                        case 'png':
                            $imageFileName .= '.png';
                            $source = imagecreatefrompng($drawing->getPath());
                            imagepng($source, $imageFilePath . $imageFileName);
                            break;
                    }
                    $startColumn = $this->ABC2decimal($startColumn);
                    dump($imageFilePath . $imageFileName);
                    $data[$startRow - 1][$startColumn] = $imageFilePath . $imageFileName;
                }
                dump(count($data));
            }

        } catch (\Exception $e) {
            throw $e;
        }
    }

    public function ABC2decimal($abc)
    {
        $ten = 0;
        $len = strlen($abc);
        for ($i = 1; $i <= $len; $i++) {
            $char = substr($abc, 0 - $i, 1);//反向获取单个字符

            $int = ord($char);
            $ten += ($int - 65) * pow(26, $i - 1);
        }
        return $ten;
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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