导出到Excel - 隐藏字段不生成结果

时间:2013-10-11 09:31:04

标签: coldfusion hidden-field cfc

我有一个简单的CFC文件,其中包含针对不同查询的不同功能。一个单独的函数,可根据查询动态显示报告。

所有查询都有效,除了返回约1的查询。 50k行。它只是一个空白屏幕&我没有错。当我转储查询结果时,它们会被转储到屏幕上,但在表格报告中显示它时却什么都没有。

我还有另一个返回100k行的CFM文件。工作正常。

以下是无效的CFC代码。

<cfcomponent>
    <cfparam name="qry1" default="">
<cffunction name="showqry1" access="remote">
    <cfquery name="qry1" dataSource="myds"  cachedwithin="#CreateTimeSpan(0, 2, 0, 0)#">
        <!--- myquery --->
    </cfquery>
    <cfset Display()>
</cffunction>
<cffunction name="showqry2" access="remote">
    <cfquery name="qry1" dataSource="myds"  cachedwithin="#CreateTimeSpan(0, 2, 0, 0)#">
        <!--- myquery --->
    </cfquery>
    <cfset Display()>
</cffunction>

<cffunction name="Display" access="private">
    <cfdump var="#rptQry#" top="20">   
    <cfsavecontent variable="myrpt">
        <table>
                <!--- make a tabular report here using cfloop over the query--->
        </table>
    </cfsavecontent>

   <cfform action="test.cfm" method="post" name="ExcelData">
        <cfoutput>#myrpt#</cfoutput>
        <cfinput type="hidden" name="excel_data" value="#myrpt#"/><!---This is giving the error. --->
        <cfinput type="submit" name="test" value="Export" />
    </cfform>

</cffunction>  
</cfcomponent>

任何想法为什么CFM工作正常但CFC没有?我需要我的CFC工作&amp;不希望它将它转换为CFM ......

更新: 我在上面的代码中添加了一条注释(“这是错误”),这是导致错误的原因。无论CFC / CFM如何,这都不起作用。

我使用隐藏字段将数据传递到另一个将数据导出到excel的文件。任何替代建议??

非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:3)

你仍然需要阅读我在评论中提出的关于如何清楚地提问的文件。

但是,您将记录集放入变量qry1,但尝试转储变量rptQry。但这只是错误,除非有一些代码你没有向我们展示填充rptQry

另外,从编码练习POV开始,你不应该在函数中输出东西:最好在CFM页面中完成。使用CFC方法获取数据;用CFM显示它。

我还建议您阅读如何使用CFML(或一般)进行OO。也许得到马特吉福德的书“Object-Oriented Programming in ColdFusion

答案 1 :(得分:0)

您的显示功能具有表格数据的cfsavecontent,您将其放入cfc内的cfform中。我不知道你为什么这样做。 Insted,只需执行ajax调用,返回cfsavecontent,然后在cfm中显示它。

否则,我猜您可能必须在Display功能中输出cfform。我可能错了,但我认为你不能简单地在cfc中放置一个cfform并期望它出现在浏览器上。 CFC不适用于浏览器渲染,它应该是cfm。

答案 2 :(得分:0)

关于评论,“这是因为我需要在点击我需要cfform的按钮时导出到excel。你能建议一些替代这个功能吗?”,我会给你一些思考的东西

首先,您谈论包含数千行的记录集,并且您有代码,您尝试在浏览器中显示该行。很简单,这需要花费大量的时间来渲染。所以,这是一个坏主意。

接下来,您的代码具有各种查询的功能,但只有一个显示功能。除非这是一个巧妙编写的函数,用于确定列名称,否则只有在所有查询具有相同列时才会起作用。如果是这种情况,也许你只需要一个查询和一些变量。

我的建议是从一个表单开始,用户发送相应的信息来确定sql写入的内容。此表单还应包含一种方式,供他们选择是否要在excel或html中呈现结果。如果他们选择html,请做一些事情以确保返回的数据不会压倒他们的浏览器。

顺便说一句,用于显示查询结果的可重用代码是个好主意。但是,自定义标记可能是更常规的标记方式。