我尝试使用ColdFusion 10和CFSpreadSheet自动处理电子表格。到目前为止,我可以读取文件并转储查询对象,没有任何问题。
<cfspreadsheet action="read" src="#theFile#" query="qData" headerrow="1" columns="1,8,9,11,33"/>
<cfdump var="#qData#"/>
{{3}}
当我尝试使用数据时会出现问题。如果我这样做:
<cfoutput query="qData" maxrows="#qData.RecordCount#">
#qData.GROUP#<br />
#qData.DOB#<br />
</cfoutput>
我立即收到错误:&#34;在QDATA中未定义元素组。&#34;
如果我转储qData.ColumnList,我会得到一个列列表:
BTBN(002),DOB ,GROUP ,MEMBER/DEPENDENT NAME ,REL
是空格和()是搞乱了吗?如果是这样,我怎样才能在读取文件时或之后立即删除那些并更新列名?
答案 0 :(得分:0)
解决方案 - 列名中有多个空格,ColdFusion不能容忍。使用正则表达式可能会做得更好,接下来我将继续努力,但这是快速而肮脏的解决方案。
<cfset colNameArray = qData.getColumnNames() />
<cfloop from="1" to="#arrayLen(colNameArray)#" index="i">
<cfset colNameArray[i] = colNameArray[i].replace(' ','') />
<cfset colNameArray[i] = colNameArray[i].replace('(','') />
<cfset colNameArray[i] = colNameArray[i].replace(')','') />
<cfset colNameArray[i] = colNameArray[i].replace('/','') />
</cfloop>
<cfset qData.setColumnNames(colNameArray) />
答案 1 :(得分:0)
(如果人们没有阅读评论......)
括号和斜线会有问题,因为它们不符合standard variable name rules。最简单的选择是使用"columnNames" attribute来指定有效的列名。 (另外,与您的问题无关,但如果您要排除标题行,请使用excludeHeaderRow="true"
)
<cfspreadsheet action="read" src="c:\path\file.xlsx"
query="qData"
columnNames="BTBN_002,DOB,GROUP_NAME,MEMBER_DEPEND_NAME,REL"
excludeHeaderRow="true"
headerrow="1"
... />
在大多数情况下,您还可以使用关联数组表示法访问无效的列名。但是,使用“columnNames”属性更简单/更清洁IMO。
<cfoutput query="qData" maxrows="#qData.RecordCount#">
#qData["BTBN(002)"][currentRow]#<br />
....
</cfoutput>