2012-02-07 71 views
1

在尝试电子表格来创建多个查询生成电子表格,下面的代码只生成一行数据,而不是整个电子表格:创建来自多个查询

<cfset filenametouse = 'Usage_Report' /> 
<cfset theDir = GetDirectoryFromPath(GetCurrentTemplatePath()) /> 
<cfset theFile = theDir & filenametouse & ".xls" /> 

<cflock name="fileActionSentItems" type="exclusive" timeout="30" throwontimeout="true"> 
    <cfset SpreadsheetObj = spreadsheetNew()> 
    <cfset fcol = {}> 
    <cfset fcol.dataformat = "@"> 

    <cfset SpreadsheetAddRow(SpreadsheetObj, "Part Number, Description, Allocated, On Hand, Pending Receipt, Job Count, Qty Needed, Qty Issued, Order Count, Qty Ordered, Qty Shipped")> 

    <cfoutput> 
      <cfset SpreadsheetAddRows(SpreadsheetObj,"#getParts.partnum#, #getParts.partdescription#, #getParts.allocated#, #getParts.onhand#, #receiptdata.recqty#, #jobdata.JobCount#, #jobdata.QtyNeeded#, #jobdata.qtySent#, #orderdata.ordercount#, #orderdata.ordered#, #orderdata.shipqty#")> 
    </cfoutput> 

    <cfset SpreadsheetFormatColumn(SpreadsheetObj,fcol,11)> 
    <cfspreadsheet action="write" filename="#theFile#" name="SpreadsheetObj" sheetname="Sheet1" overwrite="true" /> 
</cflock> 

的spreadsheetAddRows不创建数据填充行。我没有正确地做什么?

回答

1

您需要传递查询对象而不是单行数据。

<cfset SpreadsheetAddRows(SpreadsheetObj, getParts) > 

另外,您可能不需要锁定整个部分。如果该锁旨在防止并发文件访问,则只需将写入该表的代码锁定到磁盘。 (根据您的需要,您可能也会使用更细化的名称,但这只是猜测而已。)

+0

这确实有帮助,但最后7列从查询以外的部分获取数据。我如何合并它们? – aparker81 2012-02-07 19:30:22

+1

为什么不只是做一个JOIN并且在一个查询中提取所有需要的值?您可以通过调用两次SpreadsheetAddRows单独输出它们,每次查询一次,或者将两个查询拼接在一起,但只有在两个查询具有相同记录数时 - 才能以完全相同的顺序。否则,结果可能会错位。 – Leigh 2012-02-07 19:58:21

+1

...或者做一个查询查询来获取所有的数据到一个查询对象中。 – ale 2012-02-07 20:07:47

0

您没有循环查询来分配多个行。由于您不指定值应来自哪个位置,因此它们将从每个查询中的第一条记录中分配。

创建queryNew(您想另一个包含查询一切都在电子表格)

<cfset newQuery = queryNew("partNo,desc,allocated,onHand,rendingReceipt,jobCount,qtyNeeded,qtyIssued,orderCount,qtyOrdered,qtyShipped","varchar,varchar,varchar,varchar,varchar,varchar,integer,integer,integer,integer,integer,integer,integer,integer") /> 

...等,当您去指定的细胞。如果您有完整的查询对象,则可以将其添加到spreadsheetAddRows(spreadsheetObj,newQuery)/>

如果您发现电子表格创建速度太慢,则可能需要检出POI实用程序http://www.bennadel.com/projects/poi-utility.htm不可配置作为电子表格选项,但对于某些工作负载更快。