php电子表格如何替换模板中的图像



是否可以交换现有模板文件中的图像?

在我的excel xlsx模板文件中有三个图像。每个图像都有其自己唯一的名称/标题(IE:"imageBanner_1"(。每个图像都位于工作表上某些图表的参考位置,但不一定绑定到特定的单元格。

在使用图像名称的基础上,是否可以用另一个图像替换图像,使新图像与原始图像位于同一位置,并保留所有原始图像属性(阴影、宽度/长度、名称等(?

这是我尝试过但没有奏效的方法:

$fImages = $speadsheet->getSheetByName("Chart Data")->getDrawingCollection();
foreach ($fImages as $fImage) {
echo "n".$fImage->getName() ;
if ($fImage->getName() == "imageBanner_1") {
$fImage->setPath("path/to/new/file/fileName.png") ;
}
}

如何获取$fImage的所有属性?也许其中一个是imageBanner_1上匹配的正确名称

在我的excel模板中,我已将名称(在公式->名称管理器中(绑定为:

Name             Value         Refers To
imageBanner_1    Picture 9     =*Picture 9*
imageBanner_2    Picture 18    =*Picture 18*
imageBanner_3    Picture 21    =*Picture 21*

进行echo打印:

Picture 9
Picture 18
Picture 21

这告诉我getName()要么是对值的引用,要么getName()实际上是Picture X。无论哪种方式,我如何使用imageBanner_X名称作为标识符?我不知道用setPath简单地替换图像的代码是否有效,因为至少目前由于getName()的问题,我实际上无法访问图像。

==========更新======

好吧,如果我改变,我上面的代码就可以工作了:

if ($fImage->getName() == "imageBanner_1") {

if ($fImage->getName() == "Picture 13") {

但问题是,我必须知道我要替换的确切图片编号。这并不理想,因为图片编号并非总是静态编号。在某些情况下,我正在复制图表或图像,在其他情况下我正在替换。。。尤其是当涉及到复制时,每次我用不同的数据集运行脚本时,要知道确切的图片编号将是一件非常困难的事情。

嗯,这花了一些时间,但我终于完成了。

$mainTempName = "$baseDir/reports/MainReportTemplate.xlsx" ;
$mainTempReader = PhpOfficePhpSpreadsheetIOFactory::createReader("Xlsx") ;
$mainTempFile = $mainTempReader->load($mainTempName, PhpOfficePhpSpreadsheetReaderIReader::LOAD_WITH_CHARTS) ;
$mainTempFile = swapImage($mainTempFile,$localFilePath,$excelImageName,$localFileName) ;
function swapImage($inFile,$iPath,$iName,$iFile) {
foreach ($inFile->getDefinedNames() as $name) {
if ($name->getName() == $iName) {
$picID = str_replace(""","",$name->getValue()) ;
}
}
foreach ($inFile->getSheetByName("Chart Data")->getDrawingCollection() as $fImage) {
if ($fImage->getName() == $picID) {
$fImage->setPath($iPath.$iFile) ;
}
}
return $inFile ;
}

$name->getValue((以引号"Picture 9"输出值,因此需要使用str_replace来去掉"s,因为$fImage->getName()的值没有引号。

最新更新