我从这里得到参考:https://laravel-excel.maatwebsite.nl/docs/3.0/getting-started/basics
所以我用版本3
我的控制器是这样的:
public function exportToExcel(Request $request)
{
$data = $request->all();
$exporter = app()->makeWith(SummaryExport::class, compact('data'));
return $exporter->download('Summary.xlsx');
}
我的脚本导出到excel如下:
namespace App\Exports;
use App\Repositories\ItemRepository;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
class SummaryExport implements FromCollection, WithHeadings {
use Exportable;
protected $itemRepository;
protected $data;
public function __construct(ItemRepository $itemRepository, $data) {
$this->itemRepository = $itemRepository;
$this->data = $data;
}
public function collection()
{
$items = $this->itemRepository->getSummary($this->data);
return $items;
}
public function headings(): array
{
return [
'No',
'Item Number',
'Sold Quantity',
'Profit'
];
}
}
如果脚本执行,结果如下:
我想在表格上方添加一些说明或标题,并对销售数量列和利润列求和
所以我想要这样的结果:
我已经阅读了文档,并在谷歌搜索,但我没有找到解决方案
有人能帮忙吗?
- 更新**
根据该参考文献:https://laravel-excel.maatwebsite.nl/docs/3.0/export/extending
我试着补充:
....
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\BeforeExport;
use Maatwebsite\Excel\Events\BeforeWriting;
use Maatwebsite\Excel\Events\BeforeSheet;
use Maatwebsite\Excel\Events\AfterSheet;
class SummaryExport implements FromCollection, WithHeadings, WithColumnFormatting, ShouldAutoSize, WithEvents
{
...
public function registerEvents(): array
{
return [
BeforeExport::class => function(BeforeExport $event) {
$event->writer->setCreator('Patrick');
},
AfterSheet::class => function(AfterSheet $event) {
$event->sheet->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
$event->sheet->styleCells(
'B2:G8',
[
'borders' => [
'outline' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
],
]
]
);
},
];
}
}
在我上面的脚本中
但存在如下错误:
Method Maatwebsite\Excel\Sheet::styleCells does not exist
Method Maatwebsite\Excel\Sheet::setOrientation does not exist.
Method Maatwebsite\Excel\Writer::setCreator does not exist.
如何解决错误?
3条答案
按热度按时间5jvtdoz21#
你必须这样示例化一个数组:-
然后,您必须使用array_push将数据推入其中:-
然后你可以这样附加你的计算:-
而如果添加任何标题,则$count = count($array+1)。
你可以使用你正常的细胞功能。
5fjcxozz2#
在2022年的最新版本3.1中,这可以以一种非常透明和直接的方式完成。
**1.**对于带有列标题的标题/表头行,可以使用官方方法
要使其工作,请将
WithHeadings
添加到类实现部分。**官方文档:**https:docs.laravel-excel.com/3.1/exports/mapping.html#adding-a-heading-row
**2.**要在数据集末尾添加“summary”行或任何其他行,可以在
prepareRows($rows)
函数中添加此类行注意:$rows参数是一个数组。
然后在
map($row)
函数中添加逻辑以区分正常数据行和汇总行:要使map函数工作,请将
WithMapping
添加到类的implements部分。正式文件:
tzdcorbm3#
虽然前面使用prepareRows的建议可能适合您的用例,但它的缺点是无法对脚注行进行样式化。
相反,您可以执行以下操作: