首页 > 解决方案 > PHPSpreadsheet 无法设置工作表边距

问题描述

嗨,我对这个插件有一点问题,这是出错的代码

Sheet::macro('setPageMargins', function (Sheet $sheet, float $top = 1, float $right = 0.75, float $bottom = 1, float $left = 0.75) {
    $sheet->getDelegate()->getPageMargins()->setTop($top);
    $sheet->getDelegate()->getPageMargins()->setRight($right);
    $sheet->getDelegate()->getPageMargins()->setLeft($left);
    $sheet->getDelegate()->getPageMargins()->setBottom($bottom);
});

这是错误

传递给 PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::setPageMargins() 的参数 1 必须是 PhpOffice\PhpSpreadsheet\Worksheet\PageMargins 的实例,给定浮点数

我只是按照这个文档https://phpspreadsheet.readthedocs.io/en/develop/topics/recipes/#page-margins和 using maatwebsite\Excel,顺便说一下我使用的是 Laravel 5.7。

问题是如何设置边距?因为我认为文档是错误的,请帮忙

标签: excellaravelphpspreadsheet

解决方案


我相信你应该这样做:

// Create a page margins object.
$pageMargins = new \PhpOffice\PhpSpreadsheet\Worksheet\PageMargins();
$pageMargins->setTop(1);
$pageMargins->setRight(0.75);
$pageMargins->setBottom(1);
$pageMargins->setLeft(0.75);

Sheet::macro('setPageMargins', function($sheet, $pageMargins));

根据代码,它说public function setPageMargins(PageMargins $pValue)

https://github.com/PHPOffice/PhpSpreadsheet/blob/0e8fde9be6d3918ffe030bed0ba0297bfe330c4d/src/PhpSpreadsheet/Worksheet/Worksheet.php#L966

::macro调用了该setPageMargins函数,尽管这种模式让我感到困惑(它似乎是某种Maatwebsite\Excel东西)。


推荐阅读