CFspreadsheet循环

时间:2014-10-19 03:33:03

标签: excel coldfusion coldfusion-10 cfspreadsheet

我有一个关于cfspreadsheet的问题....所以我使用cfspreadshseet创建excel电子表格用于报告目的。我的页面允许用户从数据库中选择要包含在报告中的任何列。所以这是一个例子:

电子表格可能如下所示:

<名>姓---组织---地址---城市---国家---邮编---关注

乔史密斯样本12主要丹佛公司80513关注点到这里

我的问题是,如果Joe有一个以上的问题,我会得到多行的joe信息......有没有办法可以循环关注,只有1行乔?

谢谢,

史蒂夫

3 个答案:

答案 0 :(得分:2)

您需要一个唯一的行ID才能最安全地执行此操作,使用lastname的外部组可能会导致冲突。 UserID是占位符变量。请务必使用准确的ID名称替换它。当然,其中一些变量名称只是猜测。

<cfoutput query ="thequery" group="UserID">
  <cfset cList="">
  <cfoutput group="concern">
    <cfset cList=ListAppend(cList,Concern)>
  </cfoutput>
  <cfset temp = spreadsheetAddRow(my_spreadsheet,"'#fn#','#ln#',...,'#cList#'">
</cfoutput>

答案 1 :(得分:2)

使用&#34;组&#34; cfoutput的功能完全适用于此任务。只是为了抛弃另一种可能性,你也可以在数据库查询中生成列表。

例如,MySQL具有GROUP_CONCAT功能。我不知道你的表的结构,但是说你有两个表UserUserConcern,你可以使用GROUP_CONCAT这样来连接&#34;关注&#34;将值转换为单个字符串:

SQLFiddle

SELECT
     u.UserID
     , u.FirstName
     , ... other columns
     , GROUP_CONCAT( uc.Concern ) AS ConcernList
FROM UserTable u INNER JOIN UserConcern uc
         ON uc.UserID = u.UserID
GROUP BY 
     u.UserID
     , u.FirstName
     , ... other columns

对于SQL Server,标准技巧是使用XML Path:

SQLFiddle

SELECT
     u.UserID
     , u.FirstName
     , ... other columns
     , STUFF( ( SELECT ',' + uc.Concern
                FROM  UserConcern uc
                WHERE uc.UserID = u.UserID
                ORDER BY uc.Concern
                FOR XML PATH('')
               ) 
              , 1, 1, ''
          ) AS ConcernList
FROM UserTable u
GROUP BY 
     u.UserID
     , u.FirstName
     , ... other columns

然后像往常一样简单地生成电子表格。

答案 2 :(得分:0)

假设您希望每条评论都有单独的行,那么这样的行将起作用:

<cfset current_id = "">
<cfloop query = "my_query">
    <cfset next_id = user_id>
    <!--- or whatever else forms the primary key --->
    <cfif next_id neq current_id>
        <cfset current_id = next_id>
        <cfset SpreadsheetAddRow(my_spreadsheet, "#first_name#,#last_name#,etc, #comment#">
    <cfelse>
        <cfset SpreadsheetAddRow(my_spreadsheet, ",,#comment#">
    </cfif>
</cfloop>

这是基于提供的信息。如果您有唯一ID,则组属性可以更好地工作。