无需编写文件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个参数:
- 数据(查询对象)
- xlsx(boolean,xls [false,default]或者xlsx [true])
- 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>