Извлечение изображений из файла Excel (xls) с помощью PHP
У меня есть электронная таблица, которую я хотел бы импортировать с помощью 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?
Не знаю, как вас и благодарить!
2 ответа:
Кто-то, не знаю, вы ли это, задал подобный вопрос на доске PHPExcel... на это я еще не успел ответить.
$objPHPExcel->getActiveSheet()->getDrawingCollection()
Вернет ArrayObject всех объектов изображения в активном листе.
Эти объекты будут либо PHPExcel_Worksheet_Drawing, либо PHPExcel_Worksheet_MemoryDrawing объекты: вы можете определить, какие из них с помощью is_a(). Затем вы можете использовать методы, соответствующие этому классу (как описано в API) либо для чтения данные изображения из файла (для объектов PHPExcel_Worksheet_Drawing) или непосредственно из самого объекта PHPExcel_Worksheet_MemoryDrawing. Методы getName() и getDescription() можно использовать для извлечения соответствующих значений из объекта image.
Обратите внимание, что также возможно иметь объекты изображения, связанные с заголовками печати:
$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages()
Можно использовать для извлечения изображений из верхнего / нижнего колонтитула. Это массив объектов PHPExcel_Worksheet_HeaderFooterDrawing. Все Для извлечения файла изображения из этих объектов можно использовать методы PHPExcel_Worksheet_Drawing.
EDIT
Основываясь на вашем коде в модифицированном вопросе:
$drawing->getName();
Должен дать вам то, что вам нужно