PHP / Laravel-如何在每页打印中显示表格标题?

时间:2019-06-06 07:30:59

标签: php laravel laravel-5.6 maatwebsite-excel laravel-excel

我在maatwebsite(laravel-excel)5.6中使用Laravel 3.1,而我的php版本是7.1

这是 ReportExport 类:

<?php
namespace App\Exports;
use App\Report;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
class ReportExport implements ShouldAutoSize, FromView, WithColumnFormatting, WithEvents
{
    use Exportable;
    protected $id;
    public function __construct($id)
    {
        $this->id = $id;
    }
    public function view(): View
    {
        $report = Report::find($this->id);
        return view('exports.report', [
            'report' => $report,
        ]);
    }
    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $event->sheet->getDelegate()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
                ...
            },
        ];
    }
}

我的视图刀片以这种方式导出laravel:

<table>
    ...
    <thead>
    <tr>
        <th colspan="2" rowspan="2">No</th>
        <th colspan="7" rowspan="2">Mata Pelajaran</th>
        <th colspan="17">Pengetahuan</th>
        <th colspan="17">Keterampilan</th>
    </tr>
    <tr>
        <th colspan="2">KB</th>
        <th colspan="3">Angka</th>
        <th colspan="3">Predikat</th>
        <th colspan="9">Deskripsi</th>
        <th colspan="2">KB</th>
        <th colspan="3">Angka</th>
        <th colspan="3">Predikat</th>
        <th colspan="9">Deskripsi</th>
    </tr>
    </thead>
    <tbody>
    ...
    @php ($group = 'A')
    @php ($number = 0)
    @foreach($values as $item)
    @if($number==0 || $group!=$item['group'])
    <tr>
        <td colspan="9">Kelompok {{$item['group']}}</td>
        <td colspan="2"></td>
        <td colspan="3"></td>
        <td colspan="3"></td>
        <td colspan="9"></td>
        <td colspan="2"></td>
        <td colspan="3"></td>
        <td colspan="3"></td>
        <td colspan="9"></td>
    </tr>
    @php ($number = 0)
    @endif
    <tr>
        <td colspan="2">{{++$number}}</td>
        <td colspan="7">{{$item['lesson_name']}}</td>
        <td colspan="2">{{$item['kb_pengetahuan']}}</td>
        <td colspan="3">{{$item['nilai_pengetahuan']}}</td>
        <td colspan="3">{{$item['predikat_pengetahuan']}}</td>
        <td colspan="9">{{$item['deskripsi_pengetahuan']}}</td>
        <td colspan="2">{{$item['kb_keterampilan']}}</td>
        <td colspan="3">{{$item['nilai_keterampilan']}}</td>
        <td colspan="3">{{$item['predikat_keterampilan']}}</td>
        <td colspan="9">{{$item['deskripsi_keterampilan']}}</td>
    </tr>
    @php ($group = $item['group'])
    @endforeach
    </tbody>
</table>

该脚本有效。但是,如果我在打印预览中看到,则表头仅显示在页面1中。我希望表头显示在所有页面上

我该怎么办?

1 个答案:

答案 0 :(得分:1)

当您在此处使用刀片时,..因此您需要根据条件重复页眉以针对每一页进行分隔。您希望在页面上显示多少记录。

更好地将其创建为子视图,并根据条件包含标题。.我的意思是在没有行数之后(基于页面上调整的空间)。

以下是使用子视图的文档-https://laravel.com/docs/5.8/blade#including-sub-views

如果您要用于从记录中生成Excel,则可以使用此方法。

Set rows to repeat at top when printing - PHPExcel

让我知道是否有帮助。