Создать электронную таблицу из нескольких запросов - PullRequest
1 голос
/ 07 февраля 2012

При попытке создать электронную таблицу, созданную из нескольких запросов, следующий код создает только одну строку данных, а не всю электронную таблицу:

<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 не создает данные для заполнения.строкиЧто я не правильно делаю?

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Вам нужно передать объект запроса вместо одной строки данных.

<cfset SpreadsheetAddRows(SpreadsheetObj, getParts) >

Кроме того, вам, вероятно, не нужно блокировать весь этот раздел. Если блокировка предназначена для предотвращения одновременного доступа к файлу, вам нужно только заблокировать код, записывающий лист на диск. (В зависимости от ваших потребностей вы также можете использовать более детальное имя. Но это только предположение.)

0 голосов
/ 07 февраля 2012

Вы не просматриваете запрос, чтобы назначить более одной строки.Поскольку вы не указываете, с какой позиции должны поступать значения, они присваиваются из первой записи в каждом запросе.

Создайте еще один запрос, содержащий все, что вы хотите в электронной таблице, с помощью 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 Не так настраивается, как параметры электронной таблицы, но быстрее для некоторых рабочих нагрузок.

...