PHPExcel 一个单元格中有多个图像
PHPExcel more than one image in a cell
我需要创建一个只有 2 列的 excel 文档。第一个将包含多个 150 像素大的图像,第二个将包含一个网络代码。由于某种原因,只添加了一张图像,文件似乎已损坏。不确定我做错了什么...
<?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
在我尝试查看您的文件之前需要注意几点:
这里首先要注意的一点是Excel不在单元格中存储图像,它"overlays"图像,并且不特别关心单元格边界出现在哪里,所以图像可以是一个固定的大小,不管它覆盖了多少单元格
当您为图像指定坐标时,您将该图像的左上角关联到该单元格的左上角....其中底部 and/or图像的右角根本不是由细胞决定的。将行高或列宽设置为自动调整不会受到图像的任何影响,因为图像被覆盖,而不是单元格的内容
您可以使用绘图对象的 setOffsetX()
和 setOffsetY()
方法从相关单元格的左上角偏移图像。
您可以 link 使用不同的偏移值相对于同一个单元格的左上角放置多个图像,这样它们就不会重叠,但是您需要根据尺寸计算出偏移量图片数量
我需要创建一个只有 2 列的 excel 文档。第一个将包含多个 150 像素大的图像,第二个将包含一个网络代码。由于某种原因,只添加了一张图像,文件似乎已损坏。不确定我做错了什么...
<?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
在我尝试查看您的文件之前需要注意几点:
这里首先要注意的一点是Excel不在单元格中存储图像,它"overlays"图像,并且不特别关心单元格边界出现在哪里,所以图像可以是一个固定的大小,不管它覆盖了多少单元格
当您为图像指定坐标时,您将该图像的左上角关联到该单元格的左上角....其中底部 and/or图像的右角根本不是由细胞决定的。将行高或列宽设置为自动调整不会受到图像的任何影响,因为图像被覆盖,而不是单元格的内容
您可以使用绘图对象的 setOffsetX()
和 setOffsetY()
方法从相关单元格的左上角偏移图像。
您可以 link 使用不同的偏移值相对于同一个单元格的左上角放置多个图像,这样它们就不会重叠,但是您需要根据尺寸计算出偏移量图片数量