1

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

4 回答 4

3

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

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

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

于 2012-11-19T22:40:06.460 回答
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">
于 2014-10-03T14:58:14.823 回答
1

Apache POI 是必经之路。http://poi.apache.org/

花点时间阅读文档并进行一些测试,因为它可以让您完全控制而不是试图用 CSS 来伪造 HTML 表格。

于 2012-11-20T00:04:26.140 回答
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 Server,您可以查看 Oracle 的 BI 工具或 SSRS对于 SQL 服务器。有几个 BI 工具在没有支持选项的情况下是免费的,我相信 JasperSoft 就是其中之一。

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

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

于 2012-11-20T11:36:03.737 回答