将图片添加到PhpSpreadsheet中的评论

时间:2019-01-31 18:55:25

标签: php phpexcel phpspreadsheet

我在PhpSpreadsheet中有一条评论,我想为其添加背景图片。 注释创建如下:

$spreadsheet->getActiveSheet()->getComment($cell)->getText()->createTextRun('Test text');

但是文档中没有关于如何向其添加背景图片的任何内容。

1 个答案:

答案 0 :(得分:0)

我能够通过(错误的但可行的)解决方法解决问题。似乎PHPSpreadsheet尚无法(但尚未)创建评论的背景图片,也许PHPSpreadsheet将来可以做到。

解决方法: PHPSpreadsheet无法使用backgroundimage创建注释,但是 Powershell 是。使用以下 Powershell 脚本,您将背景图像添加到工作表1中C2行的注释中。

$excel = new-object -comobject excel.application
$workbook = $excel.workbooks.open("C:\MyExcel.xlsx")
$worksheet = $workbook.worksheets.item(1)
$image = "C:\MyPicture.png"
$worksheet.Range("C2").AddComment(" ")
$worksheet.Range("C2").Comment.Shape.Fill.UserPicture($image)
$workbook.save()
$workbook.close()
Stop-Process -processname powershell*

有了这些知识,您就可以在 PHP 中创建动态的Powershell脚本:

$ps_script=Array();
$ps_script[]='$excel = new-object -comobject excel.application';
$ps_script[]='$workbook = $excel.workbooks.open("'.$excel_output_path.'")';
$ps_script[]='$worksheet = $workbook.worksheets.item('.($sheetindex+1).')';
$ps_script[]='$image = "'.$img_path.'"';
$ps_script[]='$worksheet.Range("'.$cell.'").AddComment(" ")';
$ps_script[]='$worksheet.Range("'.$cell.'").Comment.Shape.Fill.UserPicture($image)';
$ps_script[]='$workbook.save()';
$ps_script[]='$workbook.close()';
$ps_script[]='Stop-Process -processname powershell*';
$ps_script = implode("\r\n", $ps_script);
file_put_contents($powershell_output, $ps_script);

现在,我们创建一个CMD脚本,调用该Powershell脚本:

$call_powershell_script=Array();
$call_powershell_script[]="TASKKILL /F /IM powershell.exe";
$call_powershell_script[]="TASKKILL /F /IM EXCEL.exe";
$call_powershell_script[]=$powershell_path.'powershell.exe "'.$powershell_output.'"';
$call_powershell_script[]="TASKKILL /F /IM powershell.exe";
$call_powershell_script[]="TASKKILL /F /IM EXCEL.exe";
$call_powershell_script = implode("\r\n", $call_powershell_script);
file_put_contents($call_powershell_script_path, $call_powershell_script);

最后,我们在PHP中调用此CMD脚本:

$output = shell_exec($cpowershell_script_path." 2>&1");
echo "<br>";
echo $output;
echo "<br>";

注意: 通常,Powershell脚本不需要以下行:

Stop-Process -processname powershell*

但是,如果没有它,PHP脚本将永远存在。

Note2 : 当脚本由PHP运行时,我在Powershell中收到一个错误,表明我的Excel文件不可访问:

使用“ 1”参数调用“ Open”的异常:“ Microsoft Office Excel无法访问文件'C:\ MyExcel.xlsx'。可能有以下几种原因:文件名或路径不存在。文件正在被另一个程序使用。您要保存的工作簿与当前打开的工作簿具有相同的名称。

找到此错误的解决方案 here