无需编写文件coldfusion下载Excel表单查询结果

我有一个简单的查询,其结果我正在寻找下载到excel的点击一个button,而无需将文件写入磁盘。我在做什么的要点。

<cfquery name="qtest" datasource="xyz"> select a,b,c from table </cfquery> <cfspreadsheet action="write" fileName="test.xls" query="the_jobfeed" overwrite=true /> <button>click here </button> 

我已经想通过将文件写入磁盘了。 因此,我正在做上述。 但是,如何保存Excel表格上的查询列的情况。

我已经使用了这段代码的一些变化:

 <cfset sheet = SpreadSheetNew()> <cfset SpreadsheetAddRow(sheet, "foo,bar")> <!--- stream it to the browser ---> <cfheader name="Content-Disposition" value="inline; filename=foo.xls"> <cfcontent type="application/vnd.ms-excel" variable="#SpreadSheetReadBinary(sheet)#"> 

这里是一个SpreadSheetService.cfc的存根,它将查询转换为一个excel文件,而不是将其写入到一个web可访问的文件夹中。

主函数createFromQuery需要3个参数:

  1. 数据(查询对象)
  2. xlsx(boolean,xls [false,default]或者xlsx [true])
  3. fileName(string,如果为空,则使用UUID。)

该服务使用服务器的临时目录作为创build,编译和读取文件到浏览器的位置。 一旦文件被读入内存,物理文件将从临时目录中删除,以确保没有其他进程可以访问它。

代码的核心:

 <cftry> <cfspreadsheet action="write" filename="#config.full_temp_name#" query="config.q" /> <cfspreadsheet action="read" src="#config.full_temp_name#" name="local.xls" /> <cffile action="delete" file="#config.full_temp_name#" /> <cfif len(arguments.fileName) GT 0> <cfheader name="content-disposition" value="attachment; filename=#arguments.fileName#.#config.extension#" /> <cfelse> <cfheader name="content-disposition" value="attachment; filename=#config.temp_name#.#config.extension#" /> </cfif> <cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(local.xls)#" reset="true" /> <cfcatch type="any"> <cfdump var="#cfcatch#" output="console" /> </cfcatch> </cftry> 

testing代码:

 <cfset oSS = new SpreadsheetService() /> <cfquery name="testData" datasource="{your_dsn}"> SELECT TOP 100 * FROM dbo.Some_Table ORDER BY id DESC </cfquery> <cfoutput> #oSS.createFromQuery(testData, false, "My Safe Excel File")# </cfoutput>