读取Excel文件中的CFSPREADSHEET无法访问结果中的列

时间:2016-04-07 15:09:24

标签: coldfusion coldfusion-10 cfspreadsheet

我尝试使用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

是空格和()是搞乱了吗?如果是这样,我怎样才能在读取文件时或之后立即删除那些并更新列名?

2 个答案:

答案 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>