插件窝 干货文章 如何使用PHPExcel将模板中的图片数据导出到Excel?

如何使用PHPExcel将模板中的图片数据导出到Excel?

drawing PhpSpreadsheet spreadsheet 图片 815    来源:    2025-04-01

使用PHPExcel导出Excel模板中的图片数据

PHPExcel(现在已迁移到PhpSpreadsheet)是一个强大的PHP库,可以处理Excel文件,包括读取和写入图片数据。以下是使用PHPExcel/PhpSpreadsheet将模板中的图片数据导出到Excel的详细方法。

准备工作

首先,确保你已经安装了PHPExcel或PhpSpreadsheet:

# 对于PhpSpreadsheet
composer require phpoffice/phpspreadsheet

方法一:从现有模板读取并导出图片

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

// 1. 加载模板文件
$templatePath = 'template.xlsx';
$spreadsheet = IOFactory::load($templatePath);

// 2. 获取所有图片
$sheet = $spreadsheet->getActiveSheet();
$drawings = $sheet->getDrawingCollection();

// 3. 处理图片数据
foreach ($drawings as $drawing) {
    // 获取图片二进制数据
    $imageData = $drawing->getPath();

    // 如果是链接图片,使用getContents()获取二进制数据
    if ($drawing instanceof \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing) {
        ob_start();
        call_user_func($drawing->getRenderingFunction(), $drawing->getImageResource());
        $imageData = ob_get_contents();
        ob_end_clean();
    }

    // 这里可以处理图片数据,如保存到文件或数据库
    file_put_contents('exported_image_' . $drawing->getName() . '.png', $imageData);
}

// 4. 导出修改后的Excel
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('export_with_images.xlsx');

方法二:向Excel添加新图片

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;

// 1. 创建或加载Excel文件
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// 2. 创建图片对象
$drawing = new Drawing();
$drawing->setName('Logo');
$drawing->setDescription('Company logo');
$drawing->setPath('path/to/your/image.jpg'); // 图片文件路径
$drawing->setHeight(100); // 设置高度
$drawing->setCoordinates('B2'); // 设置插入位置
$drawing->setWorksheet($sheet);

// 3. 保存Excel文件
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('new_file_with_image.xlsx');

高级用法:处理内存中的图片

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;

// 1. 创建Excel对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// 2. 从内存中添加图片
$imageData = file_get_contents('path/to/image.png');
$drawing = new MemoryDrawing();
$drawing->setName('In-memory image');
$drawing->setDescription('Image created from memory');
$drawing->setImageResource(imagecreatefromstring($imageData));
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_PNG);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_PNG);
$drawing->setHeight(150);
$drawing->setCoordinates('D2');
$drawing->setWorksheet($sheet);

// 3. 保存文件
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('memory_image.xlsx');

注意事项

  1. 图片格式支持:PHPExcel/PhpSpreadsheet支持PNG、JPEG、GIF和BMP格式的图片。

  2. 性能考虑:处理大量图片时可能会消耗较多内存,建议增加PHP内存限制:

    ini_set('memory_limit', '512M');
    
  3. 单元格调整:插入图片前可能需要调整单元格大小以适应图片:

    $sheet->getColumnDimension('B')->setWidth(30);
    $sheet->getRowDimension(2)->setRowHeight(100);
    
  4. 模板保护:如果模板有保护,需要先解除:

    $sheet->getProtection()->setSheet(false);
    
  5. PhpSpreadsheet迁移:如果你使用的是新版PhpSpreadsheet,命名空间已从PHPExcel改为PhpOffice\PhpSpreadsheet

希望这些方法能帮助你成功导出Excel模板中的图片数据!