6

我有一个电子表格,我想使用 PHP 导入。我可以使用 PHPExcel 导入单元格数据,但不知道如何使用电子表格中的图像。

有没有办法做到这一点,然后使用 PHP 中的图像保存到服务器等?

非常感谢您的帮助!:)


更新:

@mark-baker - 非常感谢您对此的帮助!

我在带有一个 JPG 的测试 XLS 文件中使用了以下代码:

$objPHPExcel = PHPExcel_IOFactory::load("SH.xls");

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

我想我可以输出 JPEG 标题和内容$imageContents来显示图像。

我如何获得电子表格中图像的实际名称,例如“Picture1”?PHPExcel_Worksheet_MemoryDrawing 可以做到这一点吗?

我不能感谢你!

4

3 回答 3

3

有人,我不知道是不是你自己,在 PHPExcel 板上问了一个类似的问题……我还没来得及回答。

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

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

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

请注意,也可以将图像对象与打印标题关联:

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

可用于从页眉/页脚检索图像。这是一个 PHPExcel_Worksheet_HeaderFooterDrawing 对象数组。所有 PHPExcel_Worksheet_Drawing 方法都可用于从这些对象中提取图像文件。

编辑

根据您在修改后的问题中的代码:

$drawing->getName();

应该给你你需要的

于 2011-05-24T20:51:52.520 回答
2

我已经看到了从工作表中读取图像的示例,它工作正常,但我为我的项目要求定制了相同的示例,如下所示。

require 'vendor/autoload.php';

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("./excel.xlsx");

$worksheet = $spreadsheet->getActiveSheet();
$worksheetArray = $worksheet->toArray();
array_shift($worksheetArray);

echo '<table style="width:100%"  border="1">';
echo '<tr align="center">';
echo '<td>Sno</td>';
echo '<td>Name</td>';
echo '<td>Image</td>';
echo '</tr>';

foreach ($worksheetArray as $key => $value) {

    $worksheet = $spreadsheet->getActiveSheet();
    $drawing = $worksheet->getDrawingCollection()[$key];

    $zipReader = fopen($drawing->getPath(), 'r');
    $imageContents = '';
    while (!feof($zipReader)) {
        $imageContents .= fread($zipReader, 1024);
    }
    fclose($zipReader);
    $extension = $drawing->getExtension();

    echo '<tr align="center">';
    echo '<td>' . $value[0] . '</td>';
    echo '<td>' . $value[1] . '</td>';
    echo '<td><img  height="150px" width="150px"   src="data:image/jpeg;base64,' . base64_encode($imageContents) . '"/></td>';
    echo '</tr>';
}

输出: 在此处输入图像描述

我创建了 GitHub 演示项目“phpspreadsheet-Reading-Images-from-an-Excel-File”以供将来参考。

Github 链接:https ://github.com/rajaramtt/phpspreadsheet-Reading-Images-from-an-Excel-File

于 2020-02-14T02:20:35.420 回答
0

您可以执行以下操作:

$im = {excel data} <br>
header("Content-type: image/jpeg"); // or whatever <Br>
$image = imagejpeg($im, NULL, 100);
于 2011-05-24T17:19:36.083 回答