запятая в элементах массива разбивает электронную таблицу - PullRequest
2 голосов
/ 01 марта 2012

При добавлении данных в массив один из элементов имеет запятую в своем значении.Примером значения является «Обрезать метки на 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" />

Как мне решить эту проблему?

Решено: Я установил переменную для описания детали со всеми запятыми, замененными точками с запятой.Теперь все данные отображаются в одном столбце:

 <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] />

Ответы [ 4 ]

2 голосов
/ 02 марта 2012

Вы пробовали SpreadsheetAddRows() вместо этого?Передать весь запрос?Возможно, это будет обходной путь, если предположить, что SpreadsheetAddRows() не просто вызывает SpreadsheetAddRow() внизу.

Так как SpreadsheetAddRow() не принимает дополнительный разделитель, который поддерживает большинство функций списка CF, я думаю, что в противном случае вы можете избежатьзапятую во что-то еще, затем замените ее запятой, используя spreadsheetsetcellvalue()?

. Вы можете подать запрос функции в Adobe для дополнительного разделителя для функции SpreadsheetAddRow().

1 голос
/ 02 марта 2012

Согласно Adobe Engineer от ссылка Дана А.

Кунал из Adobe указал на гораздо более простой обходной путь, заключающийся в переносе переменной в одинкавычки, а затем в двойные кавычки

Итак ... сразу после <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)) />
1 голос
/ 02 марта 2012

попробуйте использовать "listQualify ()", чтобы сначала убедиться, что ваши элементы списка - те, которые содержат запятые - не связываются с длиной списка.

0 голосов
/ 24 февраля 2018

Как сказал Генри, у меня получилось заключить переменную в одинарные кавычки, кроме случаев, когда последний символ - запятая.

<cfset SpreadsheetAddRow(SpreadsheetObj, "'col1,','col2'" />

Поэтому я добавил пробел к значению каждой ячейки, например:

<cfset SpreadsheetAddRow(SpreadsheetObj, "'col1, ','col2 '" />
...