我有一个我想用PHP导入的电子表格。我可以使用PHPExcel导入单元格数据,但无法弄清楚如何使用电子表格中的图像。
有没有办法做到这一点,然后使用PHP中的图像保存到服务器等?
非常感谢您的帮助! :)
更新
@ mark-baker - 非常感谢你对此的帮助!
我在测试XLS文件中使用了以下代码,其中包含一个JPG:
$objPHPExcel = PHPExcel_IOFactory::load("SH.xls");
foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) {
if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
ob_start();
call_user_func(
$drawing->getRenderingFunction(),
$drawing->getImageResource()
);
$imageContents = ob_get_contents();
ob_end_clean();
}
}
我想我可以输出JPEG标题和$imageContents
的内容来显示图像。
如何在电子表格中获取图像的实际名称,例如“Picture1”?这可以用PHPExcel_Worksheet_MemoryDrawing吗?
我不能够感谢你!
答案 0 :(得分:3)
有人,我不知道是不是你自己,在PHPExcel董事会上问了一个类似的问题......我还没有接受回答。
$objPHPExcel->getActiveSheet()->getDrawingCollection()
将返回活动工作表中所有图像对象的ArrayObject。
这些对象可以是PHPExcel_Worksheet_Drawing或PHPExcel_Worksheet_MemoryDrawing对象:您可以使用is_a()来识别哪些对象。然后,您可以使用适合该类的方法(如API中所述)从文件(对于PHPExcel_Worksheet_Drawing对象)读取图像数据,或直接从PHPExcel_Worksheet_MemoryDrawing对象本身读取。 getName()和getDescription()方法可用于检索图像对象的相关值。
请注意,也可以将图像对象与打印标题相关联:
$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages()
可用于从页眉/页脚中检索图像。这是一个PHPExcel_Worksheet_HeaderFooterDrawing对象的数组。所有PHPExcel_Worksheet_Drawing方法都可用于从这些对象中提取图像文件。
修改强>
根据修改后的问题中的代码:
$drawing->getName();
应该给你你需要的东西
答案 1 :(得分:2)
我看过Reading Images from a worksheet的示例,它工作正常,但是我为下面的项目需求定制了相同的示例,例如波纹管。
require 'vendor/autoload.php';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("./excel.xlsx");
$worksheet = $spreadsheet->getActiveSheet();
$worksheetArray = $worksheet->toArray();
array_shift($worksheetArray);
echo '<table style="width:100%" border="1">';
echo '<tr align="center">';
echo '<td>Sno</td>';
echo '<td>Name</td>';
echo '<td>Image</td>';
echo '</tr>';
foreach ($worksheetArray as $key => $value) {
$worksheet = $spreadsheet->getActiveSheet();
$drawing = $worksheet->getDrawingCollection()[$key];
$zipReader = fopen($drawing->getPath(), 'r');
$imageContents = '';
while (!feof($zipReader)) {
$imageContents .= fread($zipReader, 1024);
}
fclose($zipReader);
$extension = $drawing->getExtension();
echo '<tr align="center">';
echo '<td>' . $value[0] . '</td>';
echo '<td>' . $value[1] . '</td>';
echo '<td><img height="150px" width="150px" src="data:image/jpeg;base64,' . base64_encode($imageContents) . '"/></td>';
echo '</tr>';
}
我创建了GitHub演示项目“ phpspreadsheet-Reading-Images-from-Excel文件”以供将来参考。
Github链接:https://github.com/rajaramtt/phpspreadsheet-Reading-Images-from-an-Excel-File
答案 2 :(得分:0)
您可以执行以下操作:
$im = {excel data} <br>
header("Content-type: image/jpeg"); // or whatever <Br>
$image = imagejpeg($im, NULL, 100);