PHP, проблемы создания страницы для экспорта данных из базы данных в Excel с соответствующими картинками - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать страницу, на которой пользователи могут выбрать определенный инструмент и экспортировать все данные с него (номера деталей плюс описание), чтобы преуспеть. Я довольно новичок в этом вопросе, поэтому последовал несколько уроков по этому вопросу и, наконец, получил его для создания файлов Excel с номерами деталей и описаниями. Пришлось скачать phpOffice для него. Тем не менее, я все еще сталкиваюсь с некоторыми проблемами. Прежде всего, я дал возможность выбрать csv, xlsx или xls. Оба csv и xls работают, но файлы xlsx продолжают повреждаться (я использую Ma c OS и safari, если это имеет значение), и, похоже, не понимаю, почему. Во-вторых, после успешного экспорта и загрузки файла страница должна быть обновлена ​​sh или перенаправлена ​​на другую страницу. Этого не происходит, и не могу понять, почему. Последняя и самая большая проблема заключается в том, что мне нужно будет вставить изображения в этот файл Excel. Эти фотографии находятся по ссылке в базе данных. Таким образом, каждая часть имеет номер, описание и соответствующее изображение, которое необходимо добавить в каждой строке в файле Excel. Следовали некоторым учебникам (также из другого поста о переполнении стека), но либо получили сообщение о том, что URL не существует, либо что памяти недостаточно. Теперь я увеличил его до 16M, но теперь при отправке запроса на экспорт я получаю только пустой экран.

Кто-нибудь может мне помочь, чтобы страница заработала, пожалуйста? Любая помощь высоко ценится ! Если возможно, фотографии должны быть сохранены в файле Excel с высотой 200 и шириной 240.

Мой код пока:

ini_set("memory_limit","16M");
include 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;

В функции:

      $active_sheet = $file->getActiveSheet();
      $active_sheet->setCellValue('A1','Picture');
      $active_sheet->setCellValue('B1','Number');
      $active_sheet->setCellValue('C1','Description');
      $count = 2;
      foreach($parts as $part){
        $pic = PartImages::findImagebyId($part->id);
        $drawing = new MemoryDrawing();
        $active_sheet->getRowDimension($count)->setRowHeight(80);
        $gdImage = imagecreatefromjpeg($pic->url);
        $drawing->setName($part->name);
        $drawing->setDescription($part->description);
        $drawing->setResizeProportional(false);
        $drawing->setImageResource($gdImage);
        $drawing->setRenderingFunction(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG);
        $drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT);
        $drawing->setWidth(240);
        $drawing->setHeight(200);
        $drawing->setOffsetX(5);
        $drawing->setOffsetY(30);
        $drawing->setCoordinates('A'.$count);
        $drawing->setWorksheet($file->getActiveSheet());

        $active_sheet->setCellValue('B' . $count,$part->partnumber);
        $active_sheet->setCellValue('C' . $count,$part->name);
        $count++;
      }
      $name = Instruments::findId($instr);
      $file_name = $name->name . '.' . strtolower($_POST["file_type"]);
      header('Content-Type: application/x-www-form-urlencoded');
      header('Content-Transfer-Encoding: Binary');
      header("Content-disposition: attachment; filename=\"".$file_name."\"");
      header('Cache-Control: max-age=0');
      header('Cache-Control: max-age=1');
      $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($file,$_POST["file_type"]);
      ob_end_clean();
      $writer->save('php://output');
      exit;
...