使用phpspreedsheet加载图形



我正在使用phpspreedsheet加载excel,对其进行更新并再次保存...我发现的问题是它不能为图形保存很好,当您打开时Excel它告诉您典型的事情是存在问题,并且"您是否希望我们尝试恢复尽可能多的内容?"并删除图形。

Excel已在文件级别完成验证和维修。这本书的某些部分可能已经修复或丢弃。删除零件:文档的零件属性。(绘图形式(删除部分:图形形式。删除零件:绘图表格。

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

    $writer = new PhpOfficePhpSpreadsheetWriterXlsx($this->spreadsheet);
    $writer->setIncludeCharts(true);

要包含图纸,您应该使用类似的东西:

$drawing = new PhpOfficePhpSpreadsheetWorksheetDrawing();
$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 PhpOfficePhpSpreadsheetWorksheetMemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();
        ob_end_clean();
        switch ($drawing->getMimeType()) {
            case PhpOfficePhpSpreadsheetWorksheetMemoryDrawing::MIMETYPE_PNG :
                $extension = 'png';
                break;
            case PhpOfficePhpSpreadsheetWorksheetMemoryDrawing::MIMETYPE_GIF:
                $extension = 'gif';
                break;
            case PhpOfficePhpSpreadsheetWorksheetMemoryDrawing::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);
}

最新更新