|
|
|
|
|
|||||
|
|||||
| 樓主 chunhsien
發送站內信 |
由php動態產生不定數的表格
希望將這些表格輸出至excel 請問要如何做呢 謝謝
本篇文章發表於2005-06-13 16:33
|
||||
| 什麼是iT Power資訊報 | 新手會員瞧一瞧 |
| 1樓 |
我的做法不知是否對您有幫助, 不過我簡單描述一下:
如果您只是要產生基本的表格的話並存在伺服器上給 user 下載的話 您可以將資料輸出成 html 的格式 存成文字檔, 但是附檔名必需是 .xls 這樣就可以啦, 基本結構如下: <html> <head> <style> .xString {mso-number-format:'\@';} </style> </head> <body> <table border='1'> <tr> <th nowrap>name</th><th nowrap>organization</th><th nowrap>department</th> </tr> <tr> <td class='xString' nowrap>AAA</td><td class='xString' nowrap>oAAA</td><td class='xString' nowrap>dAAA</td> </tr> <tr> <td class='xString' nowrap>BBB</td><td class='xString' nowrap>oBBB</td><td class='xString' nowrap>dBBB</td> </tr> </table> </body> </html> 我是寫 ASP 的, 但是這種方法在 PHP 也適用, 因為檔案存取不受這個影響 希望可以解決您的問題
本篇文章回覆於2005-06-13 17:07
--未登入的會員無法查看對方簽名檔--
|
| 2樓 |
另外在 ASP 常用的方法
與上面不同的是可以直接顯示在 Client 瀏覽器上, 不用在伺服器上再進行檔案存取的動作了 語法必須在輸出任何資料之前, 包括 html 標籤 主要是告訴瀏覽器的網頁標頭 Response.AddHeader "content-disposition","attachment; filename=檔名.xls" Response.ContentType = "application/vnd.ms-excel" 所以如果 PHP 能夠有類似 Response.AddHeader 與 Response.ContentType 的語法 應該就可以讓有安裝 Office 的 Client 端瀏覽器處理這樣的資料了 請參考...
本篇文章回覆於2005-06-13 17:44
--未登入的會員無法查看對方簽名檔--
|
| 3樓
作者回應
chunhsien |
您提供的方法是只有秀在網頁上的原始碼必須這樣嗎
然後再自行使用存檔功能存成xls?
本篇文章回覆於2005-06-13 18:23
--未登入的會員無法查看對方簽名檔--
|
| 4樓 |
您是指 #2 說明的方法嗎?
我再補充一下: 當您原本的程式是 query.php , 且查詢資料結果是單純表格的話 您可以在 query.php 的最前面, 在輸出任何資料之前 (包括 html 標籤) 加上網頁表頭來控制現在要輸出的網頁是 Excel 格式 Client 端的瀏覽器就會呼叫 Excel 來開啟這個檔案 此時 Client 端的使用者再自行使用存檔功能存成 Excel Format File . 這種方法對程式設計者的負擔較輕, 因為有修正時只需維護 query.php 就好了 缺點是使用者仍需做存檔的工作, 而且瀏覽器需要呼叫 Excel 來開啟檔案, 速度總是慢了些 另外伺服器上不會有資料檔留下來, 對於一些要將查詢資料的檔案做保存的話, 就嫌不足 至於第 #1 種方法有需要我再補充了...
本篇文章回覆於2005-06-14 09:53
--未登入的會員無法查看對方簽名檔--
|
| 5樓 |
試試這個吧!
for ($i=0;$i<$fields;$i++){ $header .= mysql_field_name($export.$i)."\t"; //從資料庫取得欄位名(你也可以自行設定,看你自己有多少欄位) } while($row = mysql_fetch_row($export)) { $line = ''; foreach($row as $value) { if ((!isset($value)) OR ($value == "")) { $value = "\t"; } else { $value = str_replace('"', '""', $value); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim($line)."\n"; } $data = str_replace("\r","",$data); if ($data == "") { $data = "\n(0) Records Found!\n"; } header("Content-type: application/x-msdownload"); header("Content-Disposition: attachment; filename=list_".date("Y-n-j").".xls"); //產生檔案直接下載 header("Pragma: no-cache"); header("Expires: 0"); print "$header\n$data";
本篇文章回覆於2005-06-14 14:37
--未登入的會員無法查看對方簽名檔--
|
| 6樓
作者回應
chunhsien |
歐希里斯能請您多作說明嗎
看不懂你的程式碼 謝謝
本篇文章回覆於2005-06-14 15:20
--未登入的會員無法查看對方簽名檔--
|
| 7樓 |
Please see
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20050315204119L9G&fumcde=
本篇文章回覆於2005-06-14 21:29
--未登入的會員無法查看對方簽名檔--
|
| 8樓 |
大概是兩種方式:
1.在server side就直接送出xls檔給user下載或開啟 此方式由header著手,如#2 & #5 2.送出一般的html至client,再由client按按鈕另存成xls檔(#7的連結裡面有example)
本篇文章回覆於2005-06-14 21:40
--未登入的會員無法查看對方簽名檔--
|
| 9樓
作者回應
chunhsien |
Bryan~
這招的確強 不過我的網頁還包含圖示.. 也包含CSS 他好像CSS會說遺失 圖片則是XX 有辦法解決嗎
本篇文章回覆於2005-06-14 21:40
--未登入的會員無法查看對方簽名檔--
|
| 10樓 |
會用到的 CSS 都必須是放在 Excel 檔案內不能連結外部檔案喔
另外圖片就比較麻煩囉 不過如果是固定的 Logo 或 地圖的話, 您也可以把這些圖片放在 Server 上 然後用 <img src="http://server_ip/images/logo.jpg" border="0" width="圖片寬" height="圖片高"> 這樣的 html code 把圖片叫進來 不過缺點是使用者開 Excel 的時候必須能夠連網路並且 access 的到這個圖片 請參考囉!
本篇文章回覆於2005-06-15 09:59
--未登入的會員無法查看對方簽名檔--
|
| 11樓
作者回應
chunhsien |
看來還是需要尋找土法煉鋼的發法
我的網頁頁面上半部是表格下半部是圖片 我希望按下按鍵後能讓表格顯示在excel的sheet1 至於圖片則是依次擺放於sheet2...3...4 我也是了一下以下語法 但是都會出現apache應用程式錯誤的問題 不知道是不是環境要調整 $excel = new COM("Excel.Application") or die("Unable to instanciate Excel"); $excel->Visible = 1; $book=$excel->Workbooks->Add; $book->Title="excel範例"; $book->Subject="這是Excel範例程式製作的Excel檔"; $sheet=$book->Worksheets("Sheet1"); $Range=$sheet->Range("A1:C10"); For($i=1;$i<=10;$i++): For($j=1;$j<=3;$j++): $cell=$Range->Cells($j,$i); $cell->value=Chr($i+64).$j; ## 塞入A1:C10的值 EndFor; EndFor; $book->SaveAs("c:\excel.xls"); ## 存檔 $excel->Quit(); $excel->Release(); $excel = null;
本篇文章回覆於2005-06-15 10:04
--未登入的會員無法查看對方簽名檔--
|
| 12樓 |
另外補充一下:
就是您用的 CSS 語法 必須是 Excel 看得懂的語法 而不是瀏覽器用的語法喔 例如 #1 用的 .xString {mso-number-format:'\@';} 是告訴 Excel 欄位內容必須以字串處理 避免 Excel 讀到都是數字的字串就聰明的自動轉成數字 這在手機欄位是最常碰到的囉
本篇文章回覆於2005-06-15 10:06
--未登入的會員無法查看對方簽名檔--
|
| 13樓 |
原來您是用 Excel.Application 這種方法啊
那我們以上說的方法可能對您來說都派不上用場了 .....
本篇文章回覆於2005-06-15 10:12
--未登入的會員無法查看對方簽名檔--
|
| 14樓
作者回應
chunhsien |
我用別台開這個網頁
我的電腦都會出現apache應用程式錯誤的視窗 我看error.log是寫 [warn] module mod_php4.c is already added, skipping 另外一台有灌apache的電腦連進去 得到的訊息是Fatal error: Maximum execution time of 30 seconds exceeded in d:\apache\htdocs\output_excel.php on line 6 請問到底哪出問題了@@ 謝謝
本篇文章回覆於2005-06-15 11:00
--未登入的會員無法查看對方簽名檔--
|
| 15樓
作者回應
chunhsien |
快轟勒
想說是不是apache的問題 把他移除重灌appserv2.4.3 結果原本的網頁登入出現下面問題 Warning: mysql_connect(): Access denied for user 'root'@'localhost' (using password: YES) 之前的mysql有設帳號密碼 我在裝的過程也有設定一樣的 現在搞不懂為啥會這樣了><
本篇文章回覆於2005-06-15 12:09
--未登入的會員無法查看對方簽名檔--
|
| 回覆 |
| 如要回應,請先登入. |
|
![]() |
|
|