我已经花费了数小时来找出为什么在数据源为查询时使用包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)'
];
}
}
有什么想法吗?
答案 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上找到我,我是从事我们的项目的“电子鸭子”之一。