iT邦幫忙

0

PHP網頁table按button後匯出成excel檔

php
b14763 3 年前13118 瀏覽

最近在測試抽獎系統
想請問大家 我用php rand完後
用mysql_fetch_array 顯示出抽出的資料
但我要按button才匯出excel檔

但是我找到的資料都是直接執行存檔 而且不顯示頁面資料
想請問大家該怎麼做呢?

6
wiseguy
iT邦超人 1 級 ‧ 3 年前
最佳解答

PHP 讀到的資料,只能同時以一種 MIME 格式丟往瀏覽器。要嘛是純文字的 HTML 網頁,要嘛是 Excel 格式的檔案。所以已經看到網頁之後,想要按 button 再有 Excel 格式,等於步驟再來一次,只是第二次是把資料產生 Excel 後再丟往瀏覽器。

你的狀況是,這資料是 rand 出來的,所以不能執行兩次,要不然結果不一樣。所以就是在一次執行時,先產生 Excel 檔,暫存在 server,並同時把純文字資料輸出到瀏覽器。等到有人按鈕時,再抓 Excel 檔輸出即是同一份。不過要記得定時清理這些 Excel 檔,要不然會越積越多。

假如你不願意暫存,那有一個比較豬頭但有效的方式,就是把已經輸出成網頁的名單內容再當做 form 資料,在按匯出時,submit 到 server 端轉成 Excel 格式再下載。不過我是好奇啦~ 幹嘛一定要匯出成 Excel 檔不可?把網頁存檔不也一樣可以記錄?在網頁的表格上按右鍵也有『將表格匯入 Excel』的選項。太多方法可以記錄,最不值得的就是匯出成 Excel,花費的功與獲得的效益不成比例。

b14763 iT邦新手 4 級 ‧ 3 年前 檢舉

因為工作的需求阿!!感謝w大的回答

那可以在詢問該怎麼把rand出來的東西佔存到server燃後到下個頁面叫出來呢?

wiseguy iT邦超人 1 級 ‧ 3 年前 檢舉

你不是用 mysql_fetch_array 指令,在迴圈中把資料一行一行的 echo 到瀏覽器嗎?echo 一行就產生一行的 Excel 檔案啊。echo 完資料,也就產生好 Excel 了。假設你產生的 Excel 隨機取個檔名叫 sdetgfg.xls,那按 button 的動作就是連去取這個檔案就好了。如 http://site.com/path/sdetgfg.xls。就醬。

b14763 iT邦新手 4 級 ‧ 3 年前 檢舉

那會直接執行呢?

4
mutualpak
iT邦研究生 5 級 ‧ 3 年前

這是我以前寫過的程式可以使用的,請參考加以修改.

<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> 
b14763 iT邦新手 4 級 ‧ 3 年前 檢舉

這方法我試過了,但電腦不支援ActiveX控件的話
也無法執行!

4
player
iT邦大師 1 級 ‧ 3 年前

你有試過用
PHPExcel嗎?

Excel的內容在WebServer端產生後
再輸出給瀏覽器
不必強迫用戶端得先裝Excel

我要發表回答

立即登入回答