關於laravel 5做Excel的匯出

先講解一下環境好了
godaddy 的linux主機(cPanel) + Laravel5.1 + php5.7(的樣子….)

為了要做excel的匯出找了一大堆的資源
包括前端的jspdf、jquery
還有後端的LaravelExcel、phpExcel

結果前端的資源不知道為何只做得出csv檔 ,網路上大家也說前端沒有辦法做出xls
因此就開始找後端的工具
首先很直覺的就先用laravelExcel,用法跟phpexcel差不多
但是不知道為何匯出的資料都會整份變成亂碼...
看起來不像是編碼錯誤
網路上找到的解法中,唯一一個比較相近的是說<?php前面有空行
可是在專案裡面也怎麼找都找不到空行….
(之後找到的可能的解法)

所以只好轉向用phpExcel來製作
由於當初安裝laravelExcel就是base on phpExcel的
因此再安裝上沒有遇到困難(因為早就安裝好了XDD)
只是官網有提到要安裝zip
(好像是會跳出cannot found class ‘ziparchive’的錯誤)
但是godaddy的環境中怎麼找都找不到php.ini….
搞到最後才發現原來只要到cPanel->php版本選擇->把zip打勾
就好了..................
好了……………
了…………..
……………

雖然看似一切問題都解決了
結果現在用phpexcel匯出檔案後
檔案竟然只會存在伺服器上(?!!)
用了
1.$objexcel->save(php://output)
2.header(xxxxx)以下省略三行
3.ob_start(); ob_end_clean();
全部都加上去了好不容易檔案匯到了前端
才發現我根本不知道js端應該要怎麼接檔案才能下載.....
果然該是回去從js基礎開始複習了(遠望)


幾個禮拜後,終於從公司的專案上找到靈感了!

原本自己的作法是:

先把參數post到後端 →
用phpExcel產生資料存在server →
把路徑回傳給前端 →
再用window.open(url)讀取server上的檔案來執行下載

一直覺得這樣繞了兩次有點愚蠢
之後才發現原來我要的答案就在公司的專案上QQ

公司的作法:

用GET的方式把參數傳到後端, location.href = url?parameter → 
在後端產生檔案(只存在變數裡,沒有實體檔案) →
直接就return file變數(header是application/x-xlsx) →
browser就會下載了