【问题标题】:Extract images or charts from XLSX with PHP?使用 PHP 从 XLSX 中提取图像或图表?
【发布时间】:2021-04-25 22:48:15
【问题描述】:

我一直在尝试使用 phpspreadsheet 库从 Xlsx 文件中提取图像和图表;但是我没有成功。

确实,我编写的代码无法从我的 xlsx 文件中找到任何图像或图表。

但是,当我使用 Excel 将文件从 Xlsx 转换为 Xls 时,相同的代码可以工作并设法提取图像和图表。

这是我用来加载电子表格的代码:

    $fileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($filePath);

    $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($fileType);
    $spreadsheet = $reader->load($filePath);

然后我添加了官方文档提供的代码:

$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);
}

上述代码适用于 .xls 文件,但不适用于 .xlsx :getDrawingCollection 和/或 getChartCollection 返回一个包含 .xlsx 文件的空数组...

你们中有人知道如何执行此操作吗? 我愿意接受任何解决方案...即使这意味着通过另一个库转换文件...

提前致谢,

【问题讨论】:

    标签: php excel image xlsx phpspreadsheet


    【解决方案1】:

    我找到了解决方案...一行代码,在初始化阅读器后添加:

    $reader->setIncludeCharts(true);
    

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2011-05-31
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2012-07-12
      • 2012-02-07
      • 2011-06-19
      • 2013-06-30
      相关资源
      最近更新 更多