PHP 讀到的資料,只能同時以一種 MIME 格式丟往瀏覽器。要嘛是純文字的 HTML 網頁,要嘛是 Excel 格式的檔案。所以已經看到網頁之後,想要按 button 再有 Excel 格式,等於步驟再來一次,只是第二次是把資料產生 Excel 後再丟往瀏覽器。
你的狀況是,這資料是 rand 出來的,所以不能執行兩次,要不然結果不一樣。所以就是在一次執行時,先產生 Excel 檔,暫存在 server,並同時把純文字資料輸出到瀏覽器。等到有人按鈕時,再抓 Excel 檔輸出即是同一份。不過要記得定時清理這些 Excel 檔,要不然會越積越多。
假如你不願意暫存,那有一個比較豬頭但有效的方式,就是把已經輸出成網頁的名單內容再當做 form 資料,在按匯出時,submit 到 server 端轉成 Excel 格式再下載。不過我是好奇啦~ 幹嘛一定要匯出成 Excel 檔不可?把網頁存檔不也一樣可以記錄?在網頁的表格上按右鍵也有『將表格匯入 Excel』的選項。太多方法可以記錄,最不值得的就是匯出成 Excel,花費的功與獲得的效益不成比例。
因為工作的需求阿!!感謝w大的回答
那可以在詢問該怎麼把rand出來的東西佔存到server燃後到下個頁面叫出來呢?
你不是用 mysql_fetch_array 指令,在迴圈中把資料一行一行的 echo 到瀏覽器嗎?echo 一行就產生一行的 Excel 檔案啊。echo 完資料,也就產生好 Excel 了。假設你產生的 Excel 隨機取個檔名叫 sdetgfg.xls,那按 button 的動作就是連去取這個檔案就好了。如 http://site.com/path/sdetgfg.xls。就醬。
那會直接執行呢?
這是我以前寫過的程式可以使用的,請參考加以修改.
<pre class="c" name="code">
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<script language="JavaScript">
function saveToExcel(str) {
try {
var xls = new ActiveXObject("Excel.Application");
xls.Visible = true;
}
catch(e) {
alert("開啟失敗,請確定電腦已經安裝EXCEL,且瀏覽器必須允許ActiveX控件執行");
return;
}
var objTable = document.getElementById(str);
var xlBook = xls.Workbooks.Add;
var xlsheet = xlBook.Worksheets(1);
for (var i=0;i<objTable.rows.length;i++)
for (var j=0;j<objTable.rows[i].cells.length;j++)
xlsheet.Cells(i+1,j+1).value = objTable.rows[i].cells[j].innerText;
}
</script>
.
.
.
程式碼
.
.
<form name="f1">
<input type="button" value="匯出至excel" name="B1" onClick="saveToExcel('table1');">
</form>
你有試過用
PHPExcel嗎?
Excel的內容在WebServer端產生後
再輸出給瀏覽器
不必強迫用戶端得先裝Excel