【问题标题】:PHP / Laravel - How can I display table header on each page print?PHP / Laravel - 如何在每页打印上显示表格标题?
【发布时间】:2019-06-06 07:30:59
【问题描述】:

我正在使用 Laravel 5.6 和 maatwebsite(laravel-excel) 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 页。我希望表头出现在所有页面上

我该怎么做?

【问题讨论】:

  • 没有人可以帮助我吗?

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


【解决方案1】:

由于您在这里使用刀片......所以您需要根据条件重复标题以分隔每个页面。您希望在页面上显示多少记录。

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

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

如果您使用从记录生成 excel,您可以使用这种方法。

Set rows to repeat at top when printing - PHPExcel

如果有帮助,请告诉我。

【讨论】:

  • 您的答案:$objPHPExcel-&gt;getActiveSheet()-&gt;getPageSetup()-&gt;setRowsToRepeatAtTopByStartAndEnd(1,1);。您能否仅添加显示表格标题的第 1、2 和 3 页的条件。没有其他页面。我有几张桌子。如果我使用该答案,所有页面都会出现
  • 对不起。我取消选中你的答案。因为我还是发现了我上面解释的问题
  • 现在有什么问题?
  • @SuccessMan 在您为all pages 指定的问题中,解决方案是这样的……现在您的要求发生了变化,您不接受解决方案。不太好:)
  • 但是,如果有帮助,您可以传递工作表索引.. 就像 $objPHPExcel-&gt;getActiveSheet(0) 用于第一张工作表.​​.....第二张 `$objPHPExcel->getActiveSheet(1)` 类似这样。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2017-01-23
  • 2020-01-13
  • 1970-01-01
相关资源
最近更新 更多