Excel 下载 - Laravel 5.1

问题描述 投票:0回答:1

我正在使用雄辩的查询来处理三个名为发票、发票、付款的表。因此,我通过在 Laravel 中使用以下查询将所有数据导出到 Excel。

$pay=Invoice::with('invoiceduedates','payments')->where('Eventcode','=',$eventcode)->get();
$payment='';$invoicepay=array();
foreach($pay as $payble){
            $x=0;$due='';$payment='';$i=0;
            foreach($payble->invoiceduedates as $duedate){
                        $x++;
                        $due .= $duedate->date.','.$duedate->amount;
                        if($x <= count($payble->invoiceduedates)-1){
                        $due.=",";
                        }


            }

            foreach($payble->payments as $paydate){
                        $i++;
                        $payment .= $paydate->adjust_mode.','.$paydate->recieved_amount;
                        if($i <= count($payble->payments)-1){
                        $payment.=",";
                        }


            }

            $invoicepay[]= array_merge(explode(',',$due),explode(',',$payment));
            unset($due);unset($payment);unset($i);unset($x);
}
$export = json_decode(json_encode((array) $invoicepay), true);

          Excel::create('Data', function($excel) use ($export)
             {
                $excel->sheet('Inovice Data', function($sheet) use ($export)
                {
                    $sheet->fromArray($export);

                    $sheet->cells('A1:AE1', function($cells)
                     {

                                $cells->setBackground('#000000');
                                $cells->setFontColor('#fff');

                    });
                    $sheet->row(1, array(
                        'Due Date1','Due Amount1','Due Date2','Due Amount2','AdjustMode1','Rcv Amount1','AdjustMode2','Rcv Amount2'

                     ));
                });
})->download('xlsx');

以下是我的Excel结果:

| Due Date1  | Due Amount1 | Due Date2             | Due Amount2 | AdjustMode1           | Rcv Amount1 | AdjustMode2           | Rcv Amount2 |
|------------|-------------|-----------------------|-------------|-----------------------|-------------|-----------------------|-------------|
| 2016-03-25 | 2000        | 2016-02-29            | 2000        | Overseas Bank Charges | 2000        | Overseas Bank Charges | 2743        |
| 2016-03-31 | 3750        | Overseas Bank Charges | 3708        | Overseas Bank Charges | 2750        |                       |             |

但是这里发生的情况是,当发票到期日表中没有第二个到期日时,到期日 2、到期金额 2 的列与调整模式 1 和 RCV 金额 1 重叠。

我想要的实际 excel 如下

| Due Date1  | Due Amount1 | Due Date2  | Due Amount2 | AdjustMode1           | Rcv Amount1 | AdjustMode2           | Rcv Amount2 |
|------------|-------------|------------|-------------|-----------------------|-------------|-----------------------|-------------|
| 2016-03-25 | 2000        | 2016-02-29 | 2000        | Overseas Bank Charges | 2000        | Overseas Bank Charges | 2743        |
| 2016-03-31 | 3750        |            |             | Overseas Bank Charges | 3708        | Overseas Bank Charges | 2750        |

是的,当没有第二个截止日期时,我希望这些列为空。我如何在 foreach 循环或 Excel 的标题部分中控制它?请帮忙。

谢谢你。

php excel laravel-5 export maatwebsite-excel
1个回答
1
投票

你的问题是你没有给

$export
空白空间

所以maatwebsite-excel的->fromArray()函数会将数据逐一放入excel中

这些代码可以解决您的问题:(代码的一部分)

        $x=0;$due='';$payment='';$i=0;
        foreach($payble->invoiceduedates as $duedate){
                    $x++;
                    $due .= $duedate->date.','.$duedate->amount;
                    if($x <= count($payble->invoiceduedates)-1){
                    $due.=",";
                    }


        }
        //added
        if($x == 1){
            $due.=",,"; //add two empty column for  Due Date2 & Due Amount2
        }

        foreach($payble->payments as $paydate){
                    $i++;
                    $payment .= $paydate->adjust_mode.','.$paydate->recieved_amount;
                    if($i <= count($payble->payments)-1){
                    $payment.=",";
                    }


        }
        //added
        if($i == 1){
            $payment.=",,"; //add two empty column for  AdjustMode2 & Rcv Amount2
        }
© www.soinside.com 2019 - 2024. All rights reserved.