插件窝 干货文章 如何使用PHPExcel将图片数据从数据库导出到Excel?

如何使用PHPExcel将图片数据从数据库导出到Excel?

图片 PHPExcel image objDrawing 985    来源:    2025-03-31

使用PHPExcel将图片数据从数据库导出到Excel

PHPExcel是一个强大的PHP库,可以用来处理Excel文件。下面我将详细介绍如何从数据库导出图片到Excel文件。

基本步骤

  1. 准备环境

    • 确保已安装PHPExcel库
    • 数据库连接已建立
  2. 从数据库获取图片数据

    • 查询包含图片数据的记录
    • 获取图片二进制数据和其他相关信息
  3. 创建Excel文件并插入图片

    • 初始化PHPExcel对象
    • 创建工作表
    • 将图片插入到指定单元格

详细实现代码

<?php
// 引入PHPExcel库
require_once 'PHPExcel/Classes/PHPExcel.php';

// 数据库连接
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');

// 创建PHPExcel对象
$objPHPExcel = new PHPExcel();

// 设置活动工作表
$objPHPExcel->setActiveSheetIndex(0);
$sheet = $objPHPExcel->getActiveSheet();

// 查询数据库获取图片数据
$stmt = $db->query("SELECT id, image_data, image_name FROM images_table");
$images = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 设置行计数器
$row = 1;

foreach ($images as $image) {
    // 创建临时图片文件
    $tempFile = tempnam(sys_get_temp_dir(), 'img');
    file_put_contents($tempFile, $image['image_data']);

    // 创建PHPExcel图片对象
    $objDrawing = new PHPExcel_Worksheet_Drawing();
    $objDrawing->setName($image['image_name']);
    $objDrawing->setDescription($image['image_name']);
    $objDrawing->setPath($tempFile); // 图片路径

    // 设置图片位置和大小
    $objDrawing->setCoordinates('A' . $row); // 图片插入位置
    $objDrawing->setOffsetX(5); // X偏移量
    $objDrawing->setOffsetY(5); // Y偏移量
    $objDrawing->setWidth(100); // 图片宽度
    $objDrawing->setHeight(100); // 图片高度

    // 将图片添加到工作表
    $objDrawing->setWorksheet($sheet);

    // 调整行高以适应图片
    $sheet->getRowDimension($row)->setRowHeight(80);

    // 在B列写入图片名称
    $sheet->setCellValue('B' . $row, $image['image_name']);

    // 删除临时文件
    unlink($tempFile);

    $row++;
}

// 设置列宽
$sheet->getColumnDimension('A')->setWidth(20);
$sheet->getColumnDimension('B')->setWidth(30);

// 设置标题
$sheet->setTitle("图片导出");

// 设置HTTP头,输出Excel文件
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="image_export.xlsx"');
header('Cache-Control: max-age=0');

// 使用PHPExcel_Writer_Excel2007保存为Excel2007格式
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

exit;
?>

注意事项

  1. 内存限制:处理大量图片时可能需要增加PHP内存限制

    ini_set('memory_limit', '512M');
    
  2. 图片格式:确保数据库中的图片数据是有效的图像格式

  3. 性能优化:对于大量图片,考虑分批处理

  4. PHPExcel版本:不同版本可能有细微差异,上述代码适用于PHPExcel 1.8.0+

  5. 替代方案:PHPExcel已停止维护,可以考虑使用其继任者PhpSpreadsheet

使用PhpSpreadsheet的替代方案

如果使用PhpSpreadsheet(PHPExcel的现代替代品),代码类似但命名空间不同:

<?php
require 'vendor/autoload.php';

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

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// ... 数据库查询和循环 ...

$drawing = new Drawing();
$drawing->setName($image['image_name']);
$drawing->setDescription($image['image_name']);
$drawing->setPath($tempFile);
$drawing->setCoordinates('A' . $row);
$drawing->setWidth(100);
$drawing->setHeight(100);
$drawing->setWorksheet($sheet);

// ... 其余代码 ...

希望这个解决方案对您有所帮助!如有任何问题,请随时提问。