2015-06-04 66 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

高度沒有指定或它會扭曲圖像。但我仍然可能可能會檢索新的高度,並將其應用於單元格中,方法如下... –