Файл Cyber-Duck / Laravel-Excel поврежден / неверный формат - PullRequest
0 голосов
/ 03 июля 2018

Я потратил часы, чтобы выяснить, почему экспорт в Excel с пакетом cyber-duck / laravel-excel экспортирует ОК в Excel, когда источником данных является запрос, но при использовании специального сериализатора он просто останавливается правильное форматирование Excel

Нет ошибок в коде, супер простой Excel. Даже пробуя код, размещенный в документации:

Использование:

$serialiser = new CustomSerialiser();
$excel = Exporter::make('Excel');
$excel->load($collection);
$excel->setSerialiser($serialiser);
return $excel->stream('filename.xlsx');

CustomSerialiser:

namespace App\Serialisers;

use Illuminate\Database\Eloquent\Model;
use Cyberduck\LaravelExcel\Contract\SerialiserInterface;

class ExampleSerialiser implements SerialiserInterface
{
    public function getData($data)
    {
        $row = [];

        $row[] = $data->field1;
        $row[] = $data->relationship->field2;

        return $row;
    }

    public function getHeaderRow()
    {
        return [
            'Field 1',
            'Field 2 (from a relationship)'
        ];
    }
}

Есть мысли?

1 Ответ

0 голосов
/ 31 августа 2018

Какое программное обеспечение вы используете для открытия файла? Excel? OpenOffice

Если вы откроете тестовую папку> Unit> ExporterTest.php, вы должны увидеть рабочий пример в test_can_use_a_custom_serialiser.

Вы можете изменить строку 155 на $exporter = $this->app->make('cyber-duck/exporter')->make('Excel');, строку 160 на $reader = ReaderFactory::create(Type::XLSX); (в противном случае он использовал бы CSV) и закомментировать строку 174, чтобы сохранить файл, чтобы вы могли открыть его после запуска теста.

Пример ExampleSerialiser, который вы разместили, необходимо изменить, чтобы он соответствовал вашей модели Eloquent и взаимосвязям. Также в примере используется версия Eloquent, и вы упомянули построитель запросов. Если вы хотите использовать версию построителя запросов, вам нужно использовать loadQuery (я постараюсь обновить документацию на следующей неделе, чтобы охватить этот случай пользователя). Не стесняйтесь, напишите мне электронное письмо с вашим кодом, чтобы я мог посмотреть и попытаться помочь (немного трудно понять проблему, не видя фактической реализации). Вы должны найти меня на github, я один из ребят из Cyber-Duck, работающих над нашими проектами.

...