cyber-duck / laravel-excel文件损坏/格式无效

时间:2018-07-03 13:24:35

标签: excel laravel laravel-excel

我已经花费了数小时来找出为什么在数据源为查询时使用包cyber-duck/laravel-excel导出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 :(得分:0)

您使用什么软件打开文件? 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上找到我,我是从事我们的项目的“电子鸭子”之一。