台灣最具影響力的-資訊專家社群 - 讓您成為最有價值的IT專業人才
線上人數
733
 
會員總數:230779
接案會員:6775
文章總數:2320
討論主題:176271
歡迎您免費加入會員
討論區列表 >> PHP >> 如何將網頁的表格轉成excel

[變換順序]
[我要回覆]
1


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何將網頁的表格轉成excel
價值 : 50 QP  點閱數:5002 回應數:15

樓主

chunhsien
初學者
345 266
1852 578
發送站內信

由php動態產生不定數的表格
希望將這些表格輸出至excel
請問要如何做呢
謝謝
本篇文章發表於2005-06-13 16:33
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Sunny
檢舉此回應
我的做法不知是否對您有幫助, 不過我簡單描述一下:
如果您只是要產生基本的表格的話並存在伺服器上給 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樓
回應

Sunny
檢舉此回應
另外在 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樓
回應

Sunny
檢舉此回應
您是指 #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樓
回應

Sunny
檢舉此回應
會用到的 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樓
回應

Sunny
檢舉此回應
另外補充一下:
就是您用的 CSS 語法
必須是 Excel 看得懂的語法
而不是瀏覽器用的語法喔
例如 #1 用的 .xString {mso-number-format:'\@';}
是告訴 Excel 欄位內容必須以字串處理
避免 Excel 讀到都是數字的字串就聰明的自動轉成數字
這在手機欄位是最常碰到的囉


本篇文章回覆於2005-06-15 10:06
--未登入的會員無法查看對方簽名檔--
13樓
回應

Sunny
檢舉此回應
原來您是用 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
--未登入的會員無法查看對方簽名檔--
[變換順序]
1
 

回覆
如要回應,請先登入.