我尝试设置设置"使用单元格移动和调整大小"对于我在PHPSpreadsheet中的图像,但无法在任何地方找到任何信息。现在我的问题是,如果该功能尚未实现,如果是,它的调用方式如何。
答案 0 :(得分:1)
也许“为您服务”为时已晚,但这对其他人会有用
我遇到了同样的问题,发现了2个“东西” 1)没事 2)Google是一堆与50个顶级网站相关的millons链接/子链接。 Google是1998年的旧版AOL
但是,我没有放弃,我可以“修复”它。实际上,在PHPSpreadsheet文件夹中,您将看到下一个下一个路径文件夹;
有一个名为 Drawing.php 的文件,在该文件中,您将找到一个名为 writeDrawing
的函数。您将找到以下代码; [Line:152]
$objWriter->startElement('xdr:oneCellAnchor');
它必须替换为:
$objWriter->startElement('xdr:twoCellAnchor');
在2 o 3行之后,在这些代码下,您会找到此代码; [Line:166 to 169]
$objWriter->startElement('xdr:ext');
$objWriter->writeAttribute('cx', \PhpOffice\PhpSpreadsheet\Shared\Drawing::pixelsToEMU($pDrawing->getWidth()));
$objWriter->writeAttribute('cy', \PhpOffice\PhpSpreadsheet\Shared\Drawing::pixelsToEMU($pDrawing->getHeight()));
$objWriter->endElement();
添加注释标记(例如“ //”或“ / *代码* /”)并对其进行注释,以避免出现这些代码行。现在,添加以下代码;
$objWriter->startElement('xdr:to');
$objWriter->writeElement('xdr:col', $aCoordinates[0] - 1);
$objWriter->writeElement('xdr:colOff', \PhpOffice\PhpSpreadsheet\Shared\Drawing::pixelsToEMU($pDrawing->getWidth()));
$objWriter->writeElement('xdr:row', $aCoordinates[1]);
$objWriter->writeElement('xdr:rowOff', "0");
$objWriter->endElement();
在以下代码中,应修复 [Line:178至182]
$objWriter->startElement('xdr:cNvPr');
$objWriter->writeAttribute('id', $pRelationId);
$objWriter->writeAttribute('name', $pDrawing->getName());
$objWriter->writeAttribute('descr', $pDrawing->getDescription());
$objWriter->endElement();
固定代码(不要添加“ ___ $ objWriter-> endElement()___”);
$objWriter->startElement('xdr:cNvPr');
$objWriter->writeAttribute('name', $pDrawing->getName() . $pRelationId);
$objWriter->writeAttribute('descr', $pDrawing->getDescription());
$objWriter->writeAttribute('id', $pRelationId+1);
现在,在[代码行:183] INSERT 此代码中;
$objWriter->startElement('a:extLst');
$objWriter->startElement('a:ext');
$objWriter->writeAttribute('uri', "{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}");
$objWriter->endElement(); // this close a:ext
$objWriter->endElement(); // this close a:extLst
$objWriter->endElement(); // thise xdr:cNvPr [this will replace the $objWriter->endElement(); of Line 182. It was lost in the previous step
现在,像这样的代码;
require "../../PhpOffice/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
...
$imgfile = base64_decode($img_from_query_sql);
$fname = "../tmp/".rand(). ".xlsx";
file_put_contents($fname, $imgfile);
$drawing = new PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$Cell = $Letter[$j] . $row;
$drawing->setPath($fname);
$drawing->setCoordinates($Cell );
$drawing->setResizeProportional(false);
$drawing->setWidth(300);
$drawing->setHeight(300);
$drawing->setWorksheet($sheet);
$sheet->setTitle("TitleOfSheet");
$writer = new Xlsx($spreadsheet);
$writer->save("php://output");
...
执行并下载带有图像的Excel。检查图像:右键单击->“大小和属性...” 将会出现“图像格式”的右面板。在子菜单中,“属性”应为3“单选”(带黑点的圆圈) 1.移动并调整单元格大小 2.移动但不调整单元格的大小 3.不要移动或调整单元格大小
Phpspreadsheet原始地,使图像带有选项2-> 移动但不使用单元格大小 ,但是,我们更改了Drawing.php的代码,现在所有图像都是使用选项1-> 使用单元格移动和调整大小
创建现在,如果我们有一个包含“事物”列表和每行1张图像的excel文件,则可以应用过滤器,如果某些行没有任何图像,则以下图像行将不会在可见范围内重叠行(匹配结果)。 每张过滤的图片将被隐藏为父行,每张与过滤器匹配的图片将像往常一样被“粘”在其父行上