我有一个简单的查询,其结果我希望在没有将文件写入磁盘的情况下单击按钮下载到Excel中。我正在做的事情的要点。
<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工作表上的查询列大小写。
答案 0 :(得分:4)
这里是SpreadSheetService.cfc的存根,它将查询转换为excel文件,而无需将其写入可通过Web访问的文件夹。
主要功能createFromQuery
有3个参数:
此服务使用服务器的临时目录作为创建,编译和读取文件到浏览器的位置。将文件读入内存后,将从临时目录中删除物理文件,以确保没有其他进程可以访问它。
代码的核心:
<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>
测试代码:
<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>
答案 1 :(得分:2)
我暂时使用了此代码段的变体:
<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)#">