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 在逗号分隔的行插入中转义逗号的主要内容,如果未能解决你的问题,请参考以下文章

无法在数据准备中的列中转义逗号

将单个逗号分隔的行转换为多行

我需要在单独的行上用逗号分隔 mysql 表的值

Python将数据框转换为逗号分隔的行[重复]

将逗号分隔的字符串转换为单独的行

如何将逗号分隔值转换为oracle中的行?