簡體   English   中英

使用 PHP 從 XLSX 中提取圖像或圖表?

[英]Extract images or charts from XLSX with PHP?

我一直在嘗試使用 phpspreadsheet libray 從 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);
}

上面的代碼適用於 an.xls 文件,但不適用於 an.xlsx: getDrawingCollection和/或getChartCollection返回一個帶有.xlsx 文件的空數組...

你們中有人知道如何執行此操作嗎? 我願意接受任何解決方案......即使這意味着通過另一個庫轉換文件......

提前致謝,

我找到了解決方案...一行代碼,在初始化閱讀器后添加:

$reader->setIncludeCharts(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM