我有一个简单的查询,我希望通过单击按钮将其结果下载到 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 工作表上保留查询列的大小写。
最佳答案
这是 SpreadSheetService.cfc 的 stub 它将把查询转换为 Excel 文件,而无需将其写入可通过 Web 访问的文件夹。
主函数createFromQuery
有3个参数:
- 数据(查询对象)
- xlsx( bool 值,xls [false,默认] 或 xlsx [true])
- fileName(字符串,如果为空则使用 UUID。)
此服务使用服务器的临时目录作为创建、编译文件并将其读取到浏览器的位置。一旦文件被读入内存,物理文件就会从临时目录中删除,以确保没有其他进程可以访问它。
代码核心:
<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>
关于excel - 下载excel表查询结果,无需写入文件coldfusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44763198/