使用PHP从Excel文件(Xlsx)中提取图像

2022-07-17 00:00:00 php phpexcel
如何使用PHPExcel从EXCEL文件中读取图像,并将图像保存在服务器中并显示?文件的扩展名为.xlsx。

我的代码:

$objPHPExcel = PHPExcel_IOFactory::load($path);

foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) {
    if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();

        ob_end_clean();
    }

}

谢谢!!


解决方案

$objPHPExcel->getActiveSheet()->getDrawingCollection()

将返回活动工作表中所有图像对象的ArrayObject。

这些对象将是PHPExcel_WORKSHEET_DRANGING或PHPExcel_WORKSHEET_Memory Drawing对象:您可以使用[is_a()][1]标识哪个对象。然后,您可以使用适用于该类的方法(如API中所述)从文件(对于PHPExcel_WORKSHEET_DRANGING对象)或直接从PHPExcel_WORKSHEET_MhemyDrawing对象本身读取图像数据。可以使用getName()和getDescription()方法检索图像对象的相关值。

请注意,也可以将图像对象与打印页眉相关联:

$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages()

可用于从页眉/页脚检索图像。这是PHPExcel_WorkSheet_HeaderFooterDrawing对象的数组。所有PHPExcel_WORKSHEET_DRANGING方法都可用于从这些对象提取图像文件。

编辑

勺子喂食时间。

这将从当前活动的工作表中提取所有图像,并将它们写入服务器上的文件。

$objPHPExcel = PHPExcel_IOFactory::load($path);

$i = 0;
foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) {
    if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();
        ob_end_clean();
        switch ($drawing->getMimeType()) {
            case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG :
                    $extension = 'png'; break;
            case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_GIF:
                    $extension = 'gif'; break;
            case PHPExcel_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);
}

文件名

00_Image_n.extension

其中n是从1开始的数字,扩展名是图像类型的相应扩展名(png、jpg、gif等)。

相关文章