Загрузить графику с phpSpreedSheet - PullRequest
0 голосов
/ 26 июня 2019

Я использую PhpSpreedSheet, чтобы загрузить Excel, обновить его и сохранить снова ... Проблема, которую я нахожу, заключается в том, что она не очень хорошо сохраняет графику, и когда вы открываете Excel, она говорит вам типичную вещь, которая возникла проблема: «Хотите, чтобы мы попытались восстановить как можно больше контента?» и удалить графику.

Excel завершил проверку и восстановление на уровне файлов. Некоторые части этой книги, возможно, были отремонтированы или выброшены. Часть удалена: часть Свойства документа. (Форма чертежа) Часть удалена: Форма чертежа. Удаленная часть: чертежная форма.

    $reader = IOFactory::createReader('Xlsx');
    $reader->setIncludeCharts(true);


    $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($this->spreadsheet);
    $writer->setIncludeCharts(true);

1 Ответ

0 голосов
/ 26 июня 2019

Чтобы включить рисунок, вы должны использовать что-то вроде этого:

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('Logo');
$drawing->setDescription('Logo');
$drawing->setPath('./images/officelogo.jpg');
$drawing->setCoordinates('B15');
$drawing->setHeight(36);

$drawing->setWorksheet($spreadsheet->getActiveSheet());

Для считывания всех изображений следует использовать код из документации :

$i = 0;
foreach ($spreadsheet->getActiveSheet()->getDrawingCollection() as $drawing) {
    if ($drawing instanceof \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();
        ob_end_clean();
        switch ($drawing->getMimeType()) {
            case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_PNG :
                $extension = 'png';
                break;
            case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_GIF:
                $extension = 'gif';
                break;
            case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_JPEG :
                $extension = 'jpg';
                break;
        }
    } else {
        $zipReader = fopen($drawing->getPath(),'r');
        $imageContents = '';
        while (!feof($zipReader)) {
            $imageContents .= fread($zipReader,1024);
        }
        fclose($zipReader);
        $extension = $drawing->getExtension();
    }
    $myFileName = '00_Image_'.++$i.'.'.$extension;
    file_put_contents($myFileName,$imageContents);
}
...