来自 Box 的 Spout对我来说效果很好。有一些缺失的功能,但它易于使用,具有流畅的 API,并且没有依赖项(它支持 composer,但您可以独立使用它,它的依赖关系图深度为零)。
这是我使用 Spout 的“ODS 对象数组”管道:(我没有使用他们推荐的use
导入,因为所有这些代码都适合一个更大的文件,我不想污染而且$factory
模式对我来说看起来更干净)
$factory = 'Box\Spout\Writer\Common\Creator\WriterEntityFactory';
$factory::createODSWriter()
->openToBrowser('filename.ods')
->addRow($factory::createRow([
$factory::createCell(__('Heading 1')),
$factory::createCell(__('Heading 2')),
$factory::createCell(__('Heading 3')),
]))
->addRows(array_map(function($row) use ($factory) {
return $factory::createRow([
$factory::createCell($row->first_val),
$factory::createCell($row->second_val),
$factory::createCell($row->third_val),
]);
}, loadDataFromSomewhere()))
->close();