cfspreadsheet 在逗号分隔的行插入中转义逗号
Posted
技术标签:
【中文标题】cfspreadsheet 在逗号分隔的行插入中转义逗号【英文标题】:cfspreadsheet escape comma in comma separated row insert 【发布时间】:2011-07-17 23:03:33 【问题描述】:向coldfusion电子表格添加一行的函数是SpreadsheetAddrow
,它接受数据为“以逗号分隔的单元格条目列表,每列一个。”
我的一些数据中有逗号。如何在不转义列表中的逗号的情况下转义数据中的逗号?
我目前正在创建一个包含行内容的数组,然后将其转换为列表以添加到电子表格中:
<cfset row = ArrayNew(1)>
<cfloop list="#structKeyList(setRecord.columns)#" index="key">
<cfset ArrayAppend(row, "#Evaluate(key)#")>
</cfloop>
<cfset spreadsheetAddRow(xlsObj, "#ArrayToList(row)#")>
【问题讨论】:
【参考方案1】:似乎尚不支持ability to specify a different delimiter。由于您已经在循环,您不妨跳过数组并改用SpreadsheetSetCellValue。您也应该能够消除评估()。
<cfset cols = structKeyArray(yourStruct) >
<cfloop from="1" to="#arrayLen(cols)#" index="c">
<cfset SpreadsheetSetCellValue(xlsObj, yourStruct[ cols[c] ], lastRow, c)>
</cfloop>
<cfset lastRow++>
...
更新:但是,如果基础对象是查询,而不是结构,那么使用 CfSimplicity 的 SpreadSheetAddRows
建议更有效。
【讨论】:
【参考方案2】:如果您要添加到工作表的数据位于查询对象(记录集)中,那么最简单的解决方案是使用 SpreadSheetAddRows(),(而不是 SpreadSheetAddRow - 单数)。
<cfset SpreadSheetAddRows( xlsObj,query )>
工作表列是从查询列映射的,因此数据中的逗号无关紧要。
即使数据是另一种格式,或者您只添加一行,将其转换为查询对象也是解决问题的有效方法,请参阅http://cfsimplicity.com/30/workaround-for-spreadsheetaddrow-limitation-when-column-values-contain-commas
【讨论】:
@inKit - 您使用的是什么类型的对象?如果是query
,这种方法要好得多。如果是struct
,则转换为查询是一个附加步骤。所以 SpreadsheetSetCellValue 可能更有效。
这是一个查询,我正在使用该结构将查询列名称映射到电子表格的标题。
@inKit - 啊,好吧。我以为是struct
。对于查询,SpreadSheetAddRows
效率更高。
如果您想在查询中指定列怎么办。我尝试了解决方法,但在 #myCommaRow" 周围添加单引号对我不起作用。【参考方案3】:
您可以将逗号替换为字符“#130;” (见源:https://www.petefreitag.com/cheatsheets/ascii-codes/),看起来和逗号一样,但不会产生任何问题。
【讨论】:
以上是关于cfspreadsheet 在逗号分隔的行插入中转义逗号的主要内容,如果未能解决你的问题,请参考以下文章