這幾天在經典、5D碰到很多人在問,如何用CF產生EXCEL檔案,昨天夜晚就寫了一個示範程式放上來供大家參考。
我建議大家先自己慢慢體會,程式本身並不複雜,如果看不懂的再來問,最好不要看都沒看就來發問...
好的,我就用我CCF論壇的資料庫來做是實驗,目的是線上開啟EXCEL檔案和線上產生EXCEL檔案。檔案內容就是CCF論壇所有版塊的名稱和編號。我順便做了個產生WORD檔案的.代碼就改了一處.大家仔細看看.
線上開啟OFFICE檔案必須你系統安裝了OFFICE。記住這點,要不然就會提示下載。
<!---Application.cfm檔案代碼--->
<CFAPPLICATION NAME="CfToOffice"
sessionmanagement="Yes">
<CFSET request.DSN="CCF"><!---資料庫DSN--->
<!------index.cfm檔案代碼------->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<cfquery name="viewlist" datasource="#request.dsn#">
select boardID,boardNAME from board
order by boardID
</cfquery>
<html>
<head>
<title>CCForum欄目一覽</title>
</head>
<body>
<center><h3>CCForum欄目一覽</h3></center><br><br>
<table border="1" align="center">
<tr><td align="center"><b>編號</b></td><td align="center"><b>名稱</b></td></tr>
<cfoutput query="viewlist">
<tr><td align="center">#boardID#</td><td align="left">#boardname#</td></tr>
</cfoutput>
</table>
<p>
<center>
<a href="web.cfm" target="_blank">以WEB方式用EXCEL開啟</a><br><br>
<a href="doc.cfm" target="_blank">以WEB方式用word開啟</a><br><br>
<a href="file.cfm" target="_blank">產生EXCEL檔案並下載</a><br><br><br>
CopyRight(C)wait hunanet.com
</center>
</body>
</html>
<!-----這個檔案是用來線上以EXCEL檔案形式開啟的代碼---->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<cfsetting enablecfoutputonly="Yes">
<cfquery name="getboard" datasource="#request.dsn#">
select boardID,boardNAME from board
order by boardID
</cfquery>
<cfcontent type="application/msexcel">
<cfheader name="Content-Disposition" value="filename=board.xls">
<cfset tabchar=chr(9)>
<cfset newline=chr(13)&chr(10)>
<cfloop query="getboard">
<cfoutput>#boardID##tabchar##boardname##newline#</cfoutput>
</cfloop>
<!--------增加一個產生WORD示範....注意,就只改動了一處.--------->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<cfsetting enablecfoutputonly="Yes">
<cfquery name="getboard" datasource="#request.dsn#">
select boardID,boardNAME from board
order by boardID
</cfquery>
<cfcontent type="application/msword">
<cfheader name="Content-Disposition" value="filename=board.doc">
<cfset tabchar=chr(9)>
<cfset newline=chr(13)&chr(10)>
<cfloop query="getboard">
<cfoutput>#boardID##tabchar##boardname##newline#</cfoutput>
</cfloop>
<!---大家關心的來了,接下來我們做重要部分了---->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<cfsetting enablecfoutputonly="Yes"><!-- 刪除空白,提高效能 -->
<cfparam name="filebody" default="">
<cfset tabchar=chr(9)><!-- 設定TAB變數 -->
<cfset newline=chr(13)&chr(10)><!-- 設定換行變數 -->
<cfset filepath=expandpath("file/")><!-- 把相對路徑換成絕對路徑 -->
<cfset writepath="#filepath##session.cfid#.xls"><!-- 絕對路徑加上檔案名稱 -->
<!-- 查詢資料 -->
<cfquery name="getboard" datasource="#request.dsn#">
select boardID,boardNAME from board
order by boardID
</cfquery>
<!-- 把所有資訊設為一個變數filebody -->
<cfloop query="getboard">
<cfoutput>
<cfset filebody=filebody & "#boardID##tabchar##boardname#" & newline>
</cfoutput>
</cfloop>
<!-- 把filebody寫入檔案 -->
<cffile action="WRITE" file="#writepath#" output="#filebody#" addnewline="No">
<cfoutput>你所需要的資訊已經產生EXCEL格式檔案,
檔案地址是:<br>
<a href="file/#session.cfid#.xls">http<cfif CGI.HTTPS neq 'off'>s</cfif>
://#CGI.HTTP_HOST#/CF/Excel/file/#session.cfid#.xls</a>
</cfoutput>
值得注意的,我把存放動態產生的XLS檔案存放在一個叫FILE的檔案夾.你運行這代碼時必須先建立一個FILE檔案夾....要不然會出錯.