微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Laravel-Excel 导出以生成 SUBTOTAL 输出?

如何解决如何使用 Laravel-Excel 导出以生成 SUBTOTAL 输出?

我希望从 LaraVEL EXCEL 导出以根据列“Kode Sumberdaya/ Resource代码”(MysqL中的jur_kodesda)如下图:

我预期的表格结果: Expected Result

当前表格结果: Result Now

这是我的导出代码

    <?PHP

namespace App\Exports;

use App\Models\DownloadJurnalSdamodel;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\Withheadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\RegistersEventListeners;
use Maatwebsite\Excel\Events\BeforeExport;
use Maatwebsite\Excel\Events\AfterSheet;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;

class SortJurnalSDAExport implements FromCollection,Withheadings,WithMapping,WithEvents,ShouldAutoSize,WithColumnWidths,WithColumnFormatting
{
    /**
    * @return \Illuminate\Support\Collection
    */
    use RegistersEventListeners;

    protected $filesEx = [];
    protected $totalEx = 0;

    public function collection()
    {
        /* Choose Estimated Code */
        $resultRaw = DownloadJurnalSdamodel::select('jur_kodedivisi','jur_tanggal','jur_nobukti','jur_kodeper','jur_kodespk','jur_kodenasabah','jur_kodesda','jur_kodealat','jur_kodetahap','jur_keterangan','jur_volume','jur_debet','jur_kredit','jur_totalbiaya')
                ->whereIn('jur_kodeper',[6101111,6101211,6101311,6101411])
                ->orderBy('jur_kodesda')
                ->orderBy('jur_kodetahap')
                ->orderBy('jur_tanggal')
                ->get();
        $colResultRaw = collect($resultRaw);
        return $colResultRaw;
    }

    public function headings(): array
    {
        return [
            'Kode Divisi / Division Code','Tanggal / Date (mm/dd/yyyy)','No Bukti / Evidence Number','Kode Perkiraan / Estimated Code','Kode SPK / SPK Code','Kode Nasabah / Customer Code','Kode Sumber Daya / Resource Code','Kode Alat / Tool Code','Kode Tahap / Stage Code','Keterangan / Description','Volume','Debet / discharge','Kredit / Credit','Total Biaya / Total Cost',];
    }

    public function map($resultMap): array
    {
        $this->totalEx += $resultMap->jur_totalbiaya;
        return [
            $resultMap->jur_kodedivisi,$resultMap->jur_tanggal,$resultMap->jur_nobukti,$resultMap->jur_kodeper,$resultMap->jur_kodespk,$resultMap->jur_kodenasabah,$resultMap->jur_kodesda,$resultMap->jur_kodealat,$resultMap->jur_kodetahap,$resultMap->jur_keterangan,$resultMap->jur_volume,$resultMap->jur_debet,$resultMap->jur_kredit,$resultMap->jur_totalbiaya,];
    }

    public function columnWidths(): array
    {
        return [
            'J' => 55,];
    }

    public function registerEvents(): array
    {
        $styleHeader = [
            'font' => [
                'bold' => true,'size' => 12
            ]
        ];

        return [
            BeforeExport::class => function(BeforeExport $event)
            {
                $event->writer->getProperties()
                            ->setCreator('Sample Creator')
                            ->setLastModifiedBy('Sample Creator')
                            ->setTitle("Export Result from Sample Creator")
                            ->setSubject("Export Result from Sample Creator")
                            ->setDescription("Resource Code Results sorted and performed Subtotals per Resource");
            },AfterSheet::class => function(AfterSheet $event) use ($styleHeader)
            {
                $event->sheet->getStyle("A1:N1")->applyFromArray($styleHeader)->getFill()
                            ->setFillType(\PHPOffice\PHPSpreadsheet\Style\Fill::FILL_SOLID)
                            ->getStartColor()->setARGB('8F00FFCD');
                $event->sheet->setCellValue('A'. ($event->sheet->getHighestRow()+1),"Total");
                $event->sheet->getDelegate()->mergeCells("A{$event->sheet->getHighestRow()}:L{$event->sheet->getHighestRow()}");
                $event->sheet->setCellValue('N'. ($event->sheet->getHighestRow()),(($this->totalEx)/2));
            }
        ];
    }

}

我也试过以下链接Link From StackOverflow 但不工作。我希望有人能帮助我解决这个小计问题。非常感谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?