在 excel 下载 ColdFusion 11 之前预览电子表格
Preview spreadsheet prior to excel download ColdFusion 11
我正在尝试将数据从查询导出到 excel 电子表格。我使用以下代码通过 Chrome 和 IE(从 Raymond 获取)成功地将 HTML table 下载到电子表格,但我现在正在寻找一种在之前显示数据的方法下载。当前,选择提交按钮后会立即下载。
<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">
一次解决一个问题。要下载,请使用 Excel 创建一个简单的电子表格并将其保存到 ColdFusion 可用的位置。然后试试这些标签
<cfheader
name="content-disposition"
value="Attachment;filename=#NameOfYourFile#">
<cfcontent file="#NameOfYourFile#"
type="application/vnd.ms-excel">
请注意,cfheader 标记的值属性指定附件,而不是内联。
如评论中所述,使用 <cfspreadsheet>
根据您的查询创建文件。
我从 Raymond Camden 的博客 post 中找到了一些可以用于 IE 的代码。因此,用户查询数据并将它们带到上面的 table posted。该页面上有一个用于创建 cfspreadsheet 的按钮。此按钮再次调用相同的查询,在底部我插入了下面的代码,该代码写入电子表格并关闭到 excel。可能有一种减少步骤的方法,但目前这是可行的。感谢您将我指向 cfspreadsheet。珍惜你的时间。如果我改进它,我会回来 post 它。
<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">
我正在尝试将数据从查询导出到 excel 电子表格。我使用以下代码通过 Chrome 和 IE(从 Raymond 获取)成功地将 HTML table 下载到电子表格,但我现在正在寻找一种在之前显示数据的方法下载。当前,选择提交按钮后会立即下载。
<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">
一次解决一个问题。要下载,请使用 Excel 创建一个简单的电子表格并将其保存到 ColdFusion 可用的位置。然后试试这些标签
<cfheader
name="content-disposition"
value="Attachment;filename=#NameOfYourFile#">
<cfcontent file="#NameOfYourFile#"
type="application/vnd.ms-excel">
请注意,cfheader 标记的值属性指定附件,而不是内联。
如评论中所述,使用 <cfspreadsheet>
根据您的查询创建文件。
我从 Raymond Camden 的博客 post 中找到了一些可以用于 IE 的代码。因此,用户查询数据并将它们带到上面的 table posted。该页面上有一个用于创建 cfspreadsheet 的按钮。此按钮再次调用相同的查询,在底部我插入了下面的代码,该代码写入电子表格并关闭到 excel。可能有一种减少步骤的方法,但目前这是可行的。感谢您将我指向 cfspreadsheet。珍惜你的时间。如果我改进它,我会回来 post 它。
<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">