在excel下载ColdFusion 11之前预览电子表格

时间:2015-08-10 21:19:51

标签: coldfusion adobe coldfusion-11

我尝试将数据从查询导出到Excel电子表格。我使用以下代码通过Chrome和IE(从Raymond获取)成功将HTML表格下载到电子表格中,但我现在正在寻找一种在下载之前显示数据的方法。目前,当选择提交按钮时,会立即下载。

enter image description here

<cfset request.isIE = false />
<cfif cgi.http_user_agent contains "MSIE">
 <cfset request.isIE = true />
</cfif>

<cfheader name="Content-Disposition" value="inline; filename=SearchResults.xls">
<cfcontent type="application/vnd.ms-excel">
<cfset ThisOrganism="#Form.GenusSpecies#">

<cfquery name="BSAFbyOrganism" datasource="BSAFweb">
SELECT ID, StudyType, Chem_Name
FROM Summary
WHERE   GenusSpecies='#ThisOrganism#'
ORDER BY Chem_Name

</cfquery>
 <table width="100%" border="1" cellpadding="5px">
   <tr>
     <th>ID</th>
     <th>StudyType</th>
     <th>Chem_Name</th>
   </tr>
 <cfoutput query="BSAFbyOrganism">
   <tr>
     <td>#ID#</td>
     <td>#StudyType#</td>
     <td>#Chem_Name#</td>
   </tr>                  
 </cfoutput>
</table>

<cfset q= BSAFbyOrganism>
    <cfset filename = expandPath("./myexcel.xls")>
    <cfspreadsheet action="write" query="BSAFbyOrganism" filename="#filename#" overwrite="true">

    <!--- Make a spreadsheet object --->
    <cfset s = spreadsheetNew()>
    <!--- Add header row --->
    <cfset spreadsheetAddRow(s, "ID,StudyType,Chem_Name")>
    <!--- format header --->
    <cfset spreadsheetFormatRow(s,
        {
            bold=true,
            fgcolor="lemon_chiffon",
            fontsize=14
        },
    1)>
    <!--- Add query --->
    <cfset spreadsheetAddRows(s, q)>
    <cfset spreadsheetWrite(s, filename, true)>
    <cfheader name="content-disposition" value="attachment; filename=myexcel.xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true">

2 个答案:

答案 0 :(得分:2)

一次解决一个问题。要下载,请使用Excel创建一个简单的电子表格并将其保存到ColdFusion可用的位置。然后尝试这些标签

<cfheader
name="content-disposition" 
value="Attachment;filename=#NameOfYourFile#">

<cfcontent  file="#NameOfYourFile#" 
type="application/vnd.ms-excel">

请注意,cfheader标记的value属性指定附件,而不是内联。

如评论中所述,使用<cfspreadsheet>从查询中创建文件。

答案 1 :(得分:1)

我从Raymond Camden的博客文章中找到了一些我能够为IE工作的代码。因此,用户查询数据并将其带到上面发布的表格中。在该页面上是一个用于创建cfspreadsheet的按钮。这个按钮再次调用相同的查询,在底部我插入了下面的代码,该代码写入电子表格并关闭到excel。可能有一种方法可以减少一个步骤,但现在这是有效的。谢谢你指着我对cfspreadsheet。感谢你的时间。如果我改进它,我会回来发布它。

<cfset q= Organism>
<cfset filename = expandPath("./file/myexcel.xls")>
<cfspreadsheet action="write" query="Organism" filename="#filename#" overwrite="true">

<!--- Make a spreadsheet object --->
<cfset s = spreadsheetNew()>
<!--- Add header row --->
<cfset spreadsheetAddRow(s,  "ID,StudyType,Chem_Name")>
<!--- format header --->
<cfset spreadsheetFormatRow(s,
    {
        bold=true,
        fgcolor="lemon_chiffon",
        fontsize=12
    },
1)>
<!--- Add query --->
<cfset spreadsheetAddRows(s, q)>
<cfset spreadsheetWrite(s, filename, true)>
<cfheader name="content-disposition" value="attachment; filename=myexcel.xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true">