2015-06-04 65 views
1

我需要创建一个只有2个col的excel文档。第一个将包含150px大的多个图像,而第二个将包含网络代码。出于某种原因,仅添加一个图像并且该文件看起来已经被破坏。不知道我做错了......PHPExcel单元格中的多个图像

<?php 
include("../../init.php"); 

if (is_numeric($_GET[groupe])){ 

    define('PCLZIP_TEMPORARY_DIR', $_CONFIG['upload']['root'].'/cache'); 

    // filename for download 
    $groupe = mysql_query("SELECT * FROM photographe_groupe WHERE id='$_GET[groupe]'"); 
    $records = "Groupe - $groupe[nom].xlsx"; 

    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
    header('Content-Disposition:inline;filename='.$records); 

    $workbook = new PHPExcel; 
    $sheet = $workbook->getActiveSheet(); 

    $i=0; 
    $select = mysql_query("SELECT * FROM photographe_images WHERE sid='$_GET[groupe]' group by `paire`"); 
    while($photo = mysql_fetch_array($select)){ 
    // Table header 
    if ($i=="1"){ 
     $sheet->setCellValue("A1",'Photo(s)'); 
     $sheet->setCellValue('B1','Code Web'); 
     $i++; 
    } 

    // Set images in col 1 
    $select1 = mysql_query("SELECT * FROM photographe_images WHERE paire='$photo[paire]'"); 
    while($photo1 = mysql_fetch_array($select1)){ 

     $objDrawing = new PHPExcel_Worksheet_Drawing(); 
     $objDrawing->setName($photo1[img]); 
     $objDrawing->setDescription($photo1[img]); 
     $objDrawing->setWorksheet($workbook->getActiveSheet()); 
     $objDrawing->setPath($_CONFIG['upload']['root'].'/userfiles/photos/'.$photo1[img]); 
     $objDrawing->setWidth(150); 
     $objDrawing->setCoordinates('A'.$i); 

    } 

    // Set web code in col 2 
    $sheet->setCellValue("B$i",$photo[code_web]); 
    $i++; 
    } 

} 
$workbook->getActiveSheet()->getRowDimension(1)->setRowHeight(-1); 
$writer = new PHPExcel_Writer_Excel2007($workbook); 
PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP); 
$writer->save('php://output'); 
?> 

您可以下载和输出demo here

回答

0

仅有几点需要注意我尝试采取看看你的文件之前:

第一点这里要注意的是,Excel不会将图像存储在单元格中,它“覆盖”图像,并且不特别关心单元格边界出现的位置,因此图像可以是固定大小,而不管它覆盖多少单元格

当你指定一个坐标fo时ra图像时,您将该图像的左上角放置在该单元格的左上角......图像的底部和/或右角所在的位置不是由单元格决定的在所有。将行高或列宽设置为自动调整大小不会受到图像的影响,因为图像是重叠的,而不是单元格的内容。

您可以将图像从左上角偏移通过使用绘图对象的setOffsetX()setOffsetY()方法来创建相关单元格。

可以链接多个图像相对使用不同的偏移值,以便它们不重叠放在同一个小区的左上角,但你需要从图像的大小制定出补偿

+0

我看...听起来很复杂...所以我需要做的是获取图像的高度和宽度,然后将大小应用到单元格,以便图像在里面然后计算setOffsetX和setOffsetY为下一个.. 。必须有更好的方法来添加图片否? ...我不知道如何在我的代码中实现这样的策略... –

+0

好吧,您已经通过调用'setWidth(150)来强制图像宽度;'您可以使用类似于图像高度的方法 –

+0

高度没有指定或它会扭曲图像。但我仍然可能可能会检索新的高度,并将其应用于单元格中,方法如下... –