экспорт товаров из базы в exccel

123
01 февраля 2021, 13:00

делаю экспорт товаров из базы в exccel c помощью PHPExcel

как мне выгружать на скачивание картинки товаров? возможно ли скачивание пользователю папки с фото?

require_once("PHPExcel/Classes/PHPExcel.php");
require_once("PHPExcel/Classes/PHPExcel/Writer/Excel5.php");
$objPHPExcel = new PHPExcel(); //Объект PHPExcel
$objReader = PHPExcel_IOFactory::createReader('Excel5'); //Задаем ридер
$objPHPExcel = $objReader->load('export/export.xls'); //Загружаем "шаблонный" xls
foreach($_POST['parent'] as $key => $value){
    $sql = "SELECT `modx_site_content`.id,".$select." FROM `modx_site_content` 
        left join `modx_ms2_products` on `modx_ms2_products`.id = `modx_site_content`.id
        where `modx_site_content`.parent = ".$value." and `modx_site_content`.`template` = 31 and `context_key`='web' AND ".$where."";
    //echo $sql;
    $statement = $modx->query($sql);
    $parent = $statement->fetchAll(PDO::FETCH_ASSOC);
    $i = 3;
    $cost = 0;
    $j= 0;
    foreach ($parent as $result) {
            $j++;
            if ($vendor == 1){
                $sqlVendor = "SELECT `modx_ms2_vendors`.name FROM `modx_ms2_products` 
                    left join `modx_ms2_vendors` on `modx_ms2_vendors`.id = `modx_ms2_products`.`vendor`
                    where `modx_ms2_products`.id = ".$result['id']." LIMIT 1";
                $statementv = $modx->query($sqlVendor);
                $parentv = $statementv->fetchAll(PDO::FETCH_ASSOC);
                foreach ($parentv as $res) {
                    $objPHPExcel->getActiveSheet()
                    ->setCellValue('E'.$i, $res['name']);
                }
            }
            if ($composition == 1){
                $sqlComposition = "SELECT * FROM `modx_ms2_product_options` 
                    where product_id = ".$result['id']." LIMIT 1";
                //echo $sqlComposition;
                $statementc = $modx->query($sqlComposition);
                $parentc = $statementc->fetchAll(PDO::FETCH_ASSOC);
                foreach ($parentc as $res) {
                    $objPHPExcel->getActiveSheet()
                    ->setCellValue('F'.$i, $res['value']);
                }
            }
            if ($_POST['images']){
                $gallery = '';
                $sqlPath = "SELECT * FROM `modx_ms2_product_files` WHERE `product_id`=".$result['id']." limit 1";
                $statementc = $modx->query($sqlPath);
                $parentc = $statementc->fetchAll(PDO::FETCH_ASSOC);
                foreach ($parentc as $res) {
                    $filelist = array();
                    if($handle = opendir('images/products/'.$res['path'].'thumb/')){
                        while($entry = readdir($handle)){
                            $gallery.='https://kristroom.ru/assets/images/products/'.$res['path'].$entry.$_POST['delimeter'];
                        }
                        closedir($handle);
                    }
                    $gallery = substr($gallery,0,-1);
                    $objPHPExcel->getActiveSheet()
                    ->setCellValue('I'.$i, $gallery);
                }
            }
            $objPHPExcel->getActiveSheet()
            ->setCellValue('A'.$i, $result['pagetitle'])
            ->setCellValue('B'.$i, $result['article'])
            ->setCellValue('C'.$i, $result['alias'])
            ->setCellValue('D'.$i, $result['content'])
            ->setCellValue('H'.$i, $result['image'])
            ->setCellValue('K'.$i, $result['price']);
            $i++;
    }
}
$file_name = $modx->user->get('id').'-'.str_replace(' ','-',date('d-m-Y'));
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$excelFileName = 'export-'.$file_name.'.xlsx';
$excelFile = 'export/'.$excelFileName;
$objWriter->save($excelFile);
Answer 1

(php)excel умеет хранить картинки внутри документа

$gdImage = imagecreatefromjpeg('uploads/image.jpg');
$objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
$objDrawing->setName('Sample image');
$objDrawing->setDescription('Sample image');
$objDrawing->setImageResource($gdImage);
$objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG);
$objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
$objDrawing->setHeight(150);
$objDrawing->setCoordinates('C1');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

возможно имеет смысл делать ресайз перед вписыванием изображения в ячейку

READ ALSO
Как быть с большим объемом данных?

Как быть с большим объемом данных?

Имеется файл примерно на 700 000 записей, мне необходимо периодически его проверять, если есть изменения то делаю update в базу,если нет то записываю...

128
Не работает авторизация на php

Не работает авторизация на php

У меня не получается сделать авторизацию на сайте! Регистрирует у меня все хорошо, а вот войти на сайт не хочет! Я пользуюсь функцией md5() и у меня...

133
Как правильно создать базу данных mysql для товаров с разными свойствами и категориями

Как правильно создать базу данных mysql для товаров с разными свойствами и категориями

Помогите как правильно организовать структуру БД интернет магазина где у товаров есть разные свойства и категорииЧтобы было легче для фильтрации...

125
Авто-декремент mysql+php(автоматически)?

Авто-декремент mysql+php(автоматически)?

собственно, тут такой вопрос Есть игра(обычная текстовая html,css,php +mysql)

114