ColdFusion导出到多个表格上的Excel

我正在使用下面的代码将数据库中的数据导出到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> 

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

本Nadel有一个CFC包装,暴露了API的多页部分。

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

Apache POI是一个很好的select。 http://poi.apache.org/

花些时间阅读文档,做一些testingbc它给你完全的控制,而不是试图用CSS来模糊HTML表格。

我知道这是一个古老的话题,但是如果我早点发现的话,这个解决scheme会有帮助。 但是,这是一个基本的函数调用,应该允许将任意数量的查询放入具有多个选项卡的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"> 

如果你能避免使用这种方法,那将是最好的。 Excel非常智能,可以在“电子表格”输出中输出HTML,但它仍然是一个带有xls扩展名的HTML文档。 使用像这样创build的电子表格,我有几个问题,期望一个实际的 Excel文件。 在ColdFusion中,如果您尝试使用cfspreadsheet阅读这个文件,您很可能会得到一个类似于expected binary input file (或与之相关的东西)的错误,您将不得不使用excel来save as以使其成为实际Excel电子表格。 更何况这是一个静态输出。 你不能包括任何公式或任何有趣的东西,如iKnowKungFoo指示。

既然没有回答你的问题,除了POI工具,你还可以看看其他BI工具,如JasperSoft,Crystal Reports,或者如果你使用Oracle或MS SQL Server,你可以看看Oracle的BI工具或SSRS为SQL Server。 有几个BI工具是免费的,没有支持选项,我相信JasperSoft就是其中之一。

回到ColdFusion,我从来没有尝试过使用CFReport和报告生成器来创build一个Excel格式化的报告,但是在CF 8中可以使用excel格式。 我不确定你是否可以用它来创build多个工作表,我会假设不考虑下面的snipit,但它可能是值得研究的。 我找不到任何东西,但现在还早,我生病了,今天早上我的google-foo有点慢。

注意: Excel报告输出格式types对ColdFusion报告中可用的格式选项提供了有限的支持。 不支持图像和图表,包含格式(逗号,百分比,货币等)的数字数据在Excel中显示为纯文本。 Excel输出格式仅支持简单的报表,Adobebuild议您对Excel输出devise的报表进行仔细的devise和布局考虑。