excel - cyber-duck/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');
自定义序列化器:
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)'
];
}
}
有什么想法吗?
解决方案
你用什么软件打开文件?Excel?开发办公室?
如果您打开测试文件夹 > 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 行以保留文件,以便您可以在测试运行后打开它。
您发布的 ExampleSerializer 需要修改以匹配您的 Eloquent 模型和关系。此外,该示例使用 Eloquent 版本,并且您提到了查询构建器。如果要使用 Query builder 版本,则需要使用 loadQuery(我将尝试在下周更新文档以涵盖此用户案例)。请随时给我发送一封包含您的代码的电子邮件,以便我查看并尝试提供帮助(如果没有看到实际实现,这有点难以理解这个问题)。你应该在 github 上找到我,我是从事我们项目的 Cyber-Duck 人员之一。
推荐阅读
- javascript - 加载引导程序 4 css 时,侧边栏导航折叠显示空白屏幕
- c# - 从预先购买的电话号码中读取 Twilio 短信作为 REST
- reactjs - React Router Dom Pathname 不断嵌套
- terraform - 定义的 Terraform 输出为空
- sql - 将 SQL 查询转换为 JPQL - @ManyToMany 连接
- python - 为什么在“为简单的矢量化组件指定稀疏偏导数”视频中附加了一些变量?
- javascript - 从模板自动创建 PDF 文件
- ruby-on-rails - 删除 ActiveRecord[5.1] 上的索引,将 model_id 替换为 nil
- mongodb - 关于MongoDB修复的工作(选项、日志、进度等)
- azure - 我不断让用户登录失败。Azure SQL 中的错误 18456