1. 程式人生 > 實用技巧 >laravel - 匯出excel

laravel - 匯出excel

標籤:合併指定單元格,表格單元格全部自動換行,單個單元格換行,設定寬度等

效果圖:

// 程式碼

public function exportAll($result)
{
   // $result =》 查詢出來的陣列

Excel::create('訂單詳細資料', function($excel) use ($result){

$excel->sheet('訂單詳細資料', function($sheet) use ($result) {

       // 匯出的表格全部單元格進行自動換行
       $sheet->getStyle('A:T')->getAlignment()->setWrapText(TRUE);

// 設定單元格寬度
$sheet->setWidth(array(
'A' => 20,
'B' => 20,
'C' => 20,
'D' => 20,
'E' => 50,
'F' => 10,
'G' => 10,
'H' => 10,
'I' => 10,
'J' => 30,
'K' => 10,
'L' => 10,
'M' => 10,
'N' => 20,
'O' => 20,
'P' => 20,
'Q' => 15,
'R' => 15,
'S' => 15,
'T' => 15,
));

// 設定單元格標題加粗居中
$sheet->cells('A1:T1', function($cells) {
$cells->setFontWeight('bold');
$cells->setAlignment('center');
$cells->setValignment('center');
});

// 設定單元格居中
$sheet->cells('A:T', function($cells) {
$cells->setAlignment('center');
$cells->setValignment('center');
});

// 設定單元格標題名稱
$sheet->row(1, [
'訂單編號',
'下單時間',
'支付時間',
'支付方式',
'商品名稱',
'訂貨數量',
'實發數量',
'實收數量',
'單價',
'包裝物資訊',
'商品總額',
'押金金額',
'優惠金額',
'支付的上次欠款金額',
'當前訂單欠款金額',
'當前訂單已退金額',
'商品總金額',
'支付總金額',
'送貨總金額',
'收貨總金額',
]);

$i = 1;
foreach ($result as $value) {
          // 統計訂單商品
$count = count($value['order_goods']);
          // 迴圈訂單商品
foreach ($value['order_goods'] as $v) {
$i++;
$sheet->row($i,
            [
             $value['id'].' ',
            $value['created_at'],
                $value['payment_at'],
            $paymentTypesOptions[$value['payment_type']],
            $v['is_replenishment'] == 1 ? '【補】' . $v['title'] : $v['title'],
            $v['buy_num'] . $v['unit'],
            $v['deliver_num'] . $v['unit'],
            $v['receive_num'] . $v['unit'],
            $v['unit_price'] . '/' . $v['unit'],
            '¥' . $v['deposit_amount']. "\r\n".$v['package']. '/¥'.$v['package_price']. '/1'.$v['package_unit'], // 單個單元格換行,使用:"\r\n"
                 $v['real_amount'],
            bcadd($value['deposit_amount'], $value['replenishment_deposit_amount'], 2),
            $value['coupon_amount'],
             $value['arrear_amount'],
            $value['arrear_goods_amount'],
            $value['refund_goods_amount'],
            $value['goods_amount'],
            $value['pay_amount'],
             $value['deliver_amount'],
             $value['receive_amount'],
            ]
           );
}

          // 如果訂單商品資料大於1,怎進行單元格合併
if ($count > 1) {
$sheet->mergeCells('A'.($i+1-$count).':A'.$i);
$sheet->mergeCells('B'.($i+1-$count).':B'.$i);
$sheet->mergeCells('C'.($i+1-$count).':C'.$i);
$sheet->mergeCells('D'.($i+1-$count).':D'.$i);
$sheet->mergeCells('L'.($i+1-$count).':L'.$i);
$sheet->mergeCells('M'.($i+1-$count).':M'.$i);
$sheet->mergeCells('N'.($i+1-$count).':N'.$i);
$sheet->mergeCells('O'.($i+1-$count).':O'.$i);
$sheet->mergeCells('P'.($i+1-$count).':P'.$i);
$sheet->mergeCells('Q'.($i+1-$count).':Q'.$i);
$sheet->mergeCells('R'.($i+1-$count).':R'.$i);
$sheet->mergeCells('S'.($i+1-$count).':S'.$i);
$sheet->mergeCells('T'.($i+1-$count).':T'.$i);
}
}
});
})->export('xlsx');
}