ColdFusion在多个表格上导出到Excel

时间:2012-11-19 21:57:57

标签: excel coldfusion spreadsheet

我正在使用以下代码将数据从数据库导出到Excel工作表。我想要做的是将一组字段导出到同一工作簿中的不同工作表。最终结果是每个人的数据都在一张单独的工作表上,而不是像这个代码那样在同一张纸上组合。关于如何编写公式或ColdFusion的任何想法都不会让我这样做吗?

我也在使用ColdFusion 8,因此无法使用cfspreadsheet功能。

<!--- use cfsetting to block output of HTML 
outside of cfoutput tags --->
<cfsetting enablecfoutputonly="Yes">

<!--- set content type to invoke Excel --->
<cfcontent type="application/msexcel">

<!--- suggest default name for XLS file --->
<!--- use "Content-Disposition" in cfheader for 
Internet Explorer  --->
<cfheader name="Content-Disposition" value="filename=export.xls">
<!--- output data using cfloop & cfoutput --->

<cfquery name="qquestionnaire_export" datasource="mydatabase">
Select * from registration
</cfquery>

<cfoutput>
<table>
<tr><td align="center">Transfer Registration Questionnaire</td>
<td></td>
</tr>
<th>Credit Category</th>
<th>Completed Degree</th>
<th>Highest Degree</th>





</cfoutput>

<cfloop query="qquestionnaire_export">
<cfoutput>  
<tr>
<td align="center">#credit_category#</td>
<td align="center">#completed_degree#</td>
<td align="center">#highest_degree#</td>



</tr>
</cfoutput>
</cfloop>

<cfoutput><tr><td height="10"></td></tr></cfoutput>

<cfoutput></table></cfoutput>

4 个答案:

答案 0 :(得分:3)

如果你不能使用<cfspreadsheet>,那么我建议使用Apache POI项目而不是简单的&#34; HTML作为Excel通过CFCONTENT&#34;做法。 POI使您能够创建实际的 Excel电子表格,并具有与之相关的所有乐趣。

Ben Nadel有一个CFC包装器,它公开了API的多表部分。

http://www.bennadel.com/projects/poi-utility.htm

答案 1 :(得分:2)

我知道这是一个古老的话题,但如果我之前找到它,这个解决方案会有所帮助。但是,这是一个基本的函数调用,它应允许将任意数量的查询放入带有多个选项卡的Excel工作表中。

<cffunction name="QueriesToXLS" access="public">
    <cfargument name="queryArr" required="true"><!--- An Array of Query Objects --->
    <cfargument name="sheetNameArr" required="false"><!--- Optional sheet names to use instead of "Sheet1","Sheet2",... --->
    <cfset tempPath = GetTempDirectory() & CreateUuid() & ".xls"><!--- Creaete a Temp XLS File --->
    <cfset counter = 1>
    <cfloop array="#ARGUMENTS.queryArr#" index="i">
        <cfset sheetName = "Sheet#counter#">
         <cfif isDefined("ARGUMENTS.sheetNameArr")>
            <cfset sheetName = ARGUMENTS.sheetNameArr[counter]>
        </cfif>
        <cfspreadsheet action="update" filename="#tempPath#" query="i" sheetName="#sheetName#"/>
        <cfset counter += 1>
    </cfloop>
    <cfreturn SpreadsheetRead(tempPath)>
</cffunction>


<cfset xlsData = QueriesToXLS(
    [query1,query2],
    ["Details","Summary"]
)>

<cfheader name="content-disposition" value="attachment; filename=export.xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(xlsData)#" reset="true">

答案 2 :(得分:1)

Apache POI是最佳选择。 http://poi.apache.org/

花点时间阅读文档并做一些测试bc它可以让你完全控制,而不是试图用CSS捏造HTML表。

答案 3 :(得分:0)

如果您可以避免使用此方法,那将是最好的。 Excel足够聪明,可以在“电子表格”中输出您的HTML,但它仍然是一个带有xls扩展名的HTML文档。我使用这样创建的电子表格有几个问题需要实际 Excel文件。在ColdFusion中,如果您尝试使用cfspreadsheet读取此文件,您很可能会收到类似expected binary input file(或接近该文件)的错误,并且您必须使用excel到save as来使它成为一个实际的Excel电子表格。更不用说这是一个静态输出。你不能包含任何公式或任何有趣的东西,如iKnowKungFoo指示。

由于这不会回答您的问题,除了POI工具之外,您还可以查看其他BI工具,例如JasperSoft,Crystal Reports,或者如果您使用的是Oracle或MS SQL服务器您可以查看Oracle的BI工具或SSRS for SQL Server。有几个免费的BI工具没有支持选项,我相信JasperSoft就是其中之一。

回到ColdFusion,我从未尝试将CFReport与报表生成器一起使用来创建Excel格式化报表,但在CF 8中,可以使用excel格式。我不确定你是否可以用它创建多张床单,我会假设不考虑下面的剪贴板,但它可能值得研究。我找不到任何东西,但它很早,我病了,今天早上我的google-foo有点慢。

  

注意: Excel报表输出格式类型提供有限的支持   ColdFusion Reporting中提供的格式选项。图像和   不支持图表和包含格式的数字数据   (逗号,百分比,货币等)在Excel中显示为纯文本。   Excel输出格式仅支持简单报表和Adobe   建议您仔细考虑设计和布局   为Excel输出设计的报告。