CFSavecontent 中的 CFContent 标记提示用户下载.cfm文件



我写了一个ColdFusion文件,它从数据库中获取一些数据并将其存储在数组中并填充一些变量。然后,我将其格式化为html表格,并将其输出到保存在服务器上的excel文件中。

我遇到的问题是当访问页面时,文件被写入,但浏览器也会被提示下载 cfm 文件。例如,我访问了页面(bla/bla/get_open_today.cfm)文件已写入,但浏览器也想下载get_open_today.cfm。有谁知道导致此问题的原因?

以下是输出 excel 的代码:

<!--- Export to XLS file --->
<cfsavecontent variable="saveContent1">
<cfcontent type="application/msexcel">
<cfoutput>
<table border="1">
</tr>
<th >Hall ID</th>
<th >Room Number</th>
<th >Room Type</th>
<th >In Date</th>
<th >Clean Date</th>
<th >Comments</th>
</tr>
</cfoutput>
<cfoutput>
<cfloop index="x" from="1" to="#ArrayLen(myarray)#">
    <tr><td>#myarray[x][1]#</td><td> #myarray[x][2]# </td><td>#myarray[x][3]# </td><td>#myarray[x][4]#                                  </td><td>#myarray[x][5]#</td><td>#myarray[x][6]#</td></tr>
</td>
</cfloop>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
    <tr>
        <td>One Bedroom</td>
        <td>#oneBR#</td>
        <td>Units Assigned</td>
        <td>#unitsAssigned#</td>
    </tr>
    <tr>
        <td>Two Bedroom</td>
        <td>#twoBR#</td>
        <td>Units Unassigned</td>
        <td>#unitsUnassigned#</td>
    </tr>
    <tr>
        <td>Three Bedroom</td>
        <td>#threeBR#</td>
        <td>Total Units</td>
        <td>#totalUnits#</td>
    </tr>
</cfoutput>
</table>
</cfsavecontent>
<cffile action="write" mode="777" output="#saveContent1#" file="Example/www/BFILES/Unit_Report.xls">

删除 cfcontent - 这是将页面的内容类型标头设置为未处理的类型,从而提示浏览器提供下载。

cfcontent 的目的是向客户端发送信息 - 在 cfsavecontent 中使用没有任何效果,因为 savecontent 只是对大字符串执行 cfset 的一种方便方法。

您不能使用/不需要 cfcontent 将 HTML 另存为 XLS 文件。

当MS发布Office 2007时,使用html表标签进行Excel导出的技术成为一种糟糕的做事方式。 它仍然有效,但不是很好。

幸运的是,有更好的方法。 更高版本的 ColdFusion 有一个 cfspreadsheet 标签。 如果你的版本不是最新的,Ben Nadel的博客有一个指向Apache POI的链接,你可以使用。

最新更新