我正在使用以下代码将数据从数据库导出到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>
答案 0 :(得分:3)
如果你不能使用<cfspreadsheet>
,那么我建议使用Apache POI项目而不是简单的&#34; HTML作为Excel通过CFCONTENT&#34;做法。 POI使您能够创建实际的 Excel电子表格,并具有与之相关的所有乐趣。
Ben Nadel有一个CFC包装器,它公开了API的多表部分。
答案 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输出设计的报告。