下载excel表查询结果,无需写入文件coldfusion

use*_*291 3 coldfusion excel

我有一个简单的查询,我希望通过单击按钮将其结果下载到 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>
Run Code Online (Sandbox Code Playgroud)

我认为将文件写入磁盘就可以了。因此我正在做上述事情。但是如何在 Excel 工作表上保留查询列的大小写。

Adr*_*eno 5

下面是SpreadSheetService.cfc的存根,它将查询转换为 Excel 文件,而不将其写入可通过 Web 访问的文件夹。

main函数createFromQuery有3个参数:

  1. 数据(查询对象)
  2. xlsx(布尔值,xls [假,默认] 或 xlsx [真])
  3. 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>
Run Code Online (Sandbox Code Playgroud)

测试代码:

<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>
Run Code Online (Sandbox Code Playgroud)