将数据添加到数组时,其中一个元素的值中包含逗号。值的一个示例是“在103,96和90处修剪标记”。
使用以下代码将数组元素添加到电子表格对象中,如上所述,partdescription元素的数据跨越电子表格中的多个列。它作为单独的元素处理,而不是一个。
<!---Create file name variable--->
<cfset filenametouse = 'PartLevel_Report' />
<!---Set directory and full file path--->
<cfset theDir = GetDirectoryFromPath(GetCurrentTemplatePath()) />
<!---Attach file extension to full file path and file name--->
<cfset theFile = theDir & filenametouse & ".xls" />
<cflock name="fileActionSentItems" type="exclusive" timeout="30" throwontimeout="true">
<cfset SpreadsheetObj = spreadsheetNew()>
<cfset fcol = {}>
<cfset fcol.dataformat = "@">
<!---Create the column headings--->
<cfset SpreadsheetAddRow(SpreadsheetObj, "Part ##, Reorder ##, Description, Bin ##, Current Inv., Staged, Allocations, Available Inv., Shelf Count, Total Shipped, Total ## of Stores, Total Ordered, Avg. Per Store, Lead Time (in days), Low Water Mark, Total ## of Stores Remaining")>
<cfoutput query="getParts" group="partnum">
<cfset aColumns = [ partnum , shortchar08 , partdescription , binlist , inventory.currinv , staged.stagedqty , alloc.allocqty , available , shelfCount , shipdtl.shipqty , getNumberofStores.numStores , tordered , APS, paddedLeadTime, LWM , storesRemain] />
<!---add the column data to the spreadsheet--->
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
</cfoutput>
<!---Generate the spreadsheet--->
<cfspreadsheet action="write" filename="#theFile#" name="SpreadsheetObj" sheetname="Sheet1" overwrite="true" />
我该如何缓解这个问题?
解决:我将一个变量设置为partdescription,所有逗号都用分号替换。现在数据显示在同一列中:
<cfset cleanDesc = rereplace(partdescription, ",", ";", "all")>
<cfset aColumns = [ partnum , shortchar08 , cleanDesc , binlist , inventory.currinv , staged.stagedqty , alloc.allocqty , available , shelfCount , shipdtl.shipqty , getNumberofStores.numStores , tordered , APS, paddedLeadTime, LWM , storesRemain] />
答案 0 :(得分:2)
您是否尝试过SpreadsheetAddRows()
?传递整个查询?也许这将是一种解决方法,假设SpreadsheetAddRows()
不只是在下面调用SpreadsheetAddRow()
。
由于SpreadsheetAddRow()
不接受大多数CF列表功能支持的可选分隔符,我猜您可以将逗号转义为其他内容,然后使用spreadsheetsetcellvalue()
将其替换为逗号?
您可能希望向Adobe提交功能请求,以获取SpreadsheetAddRow()
功能的可选分隔符。
答案 1 :(得分:1)
尝试使用“listQualify()”来首先确保列表元素 - 包含逗号的列表元素 - 不会混淆列表长度。
答案 2 :(得分:1)
根据Adobe工程师关闭Dan A.'s link
来自Adobe的Kunal指出了一个更加直截了当的问题 解决方法,即将变量包装在单引号中,然后输入 双引号
所以......在<cfset aColumns = [ ... ]>
<!--- wrap element with single quote if it contains a comma --->
<cfloop from="1" to="#arrayLen(aColumns)#" index="i">
<cfif aColumns[i] CONTAINS ','>
<cfset aColumns[i] = "'#aColumns[i]#'">
</cfif>
</cfloop>
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
答案 3 :(得分:0)
正如亨利所说,用单引号包装变量对我有用,除非最后一个字符是逗号。
<cfset SpreadsheetAddRow(SpreadsheetObj, "'col1,','col2'" />
所以我在每个单元格的值中添加了一个空格,如下所示:
<cfset SpreadsheetAddRow(SpreadsheetObj, "'col1, ','col2 '" />