6

我正在使用 cfspreadsheet read 将工作表读入查询对象。

<cfspreadsheet action="read" src="TestExcel.xls" sheet="1" query="spreadsheetData" headerrow="1" excludeHeaderRow="true"> 

问题是,一些标题包含多个单词。所以我最终得到了一个有点像这样的查询:

ID  Name    Start Date  End Date
3   Test    1/1/2009    1/1/2013
17  Test 2  11/11/2010  11/11/2012

如果我尝试访问列名中有空格的列之一,则会收到错误消息。

<cfoutput query="spreadsheetData">
   #start date#
</cfoutput>

我也试过#[start date]#了,但是没有用。我无法控制收到的 Excel 表格的格式。有没有办法访问多字标题列?

4

1 回答 1

14

使用括号表示法时,内容必须以字符串结尾,因此:

<cfoutput query="spreadsheetData">
    #spreadsheetData['start date'][CurrentRow]#
</cfoutput>


如果你不使用引号,你传入一个变量,它是这样完成的:

<cfset ColumnName = 'start date' />

<cfoutput query="spreadsheetData">
    #spreadsheetData[ColumnName][CurrentRow]#
</cfoutput>


请注意,您必须在括号前使用查询名称 - 如果您只是编写[ColumnName],那么这是内联数组创建表示法,而不是访问变量。

此外,如果在查询循环之外使用它(即不在cfoutput/cfloop带有查询属性),您还需要限定CurrentRow变量的范围,即

spreadsheetData[ColumnName][spreadsheetData.CurrentRow]

(或提供您自己的明确数字/变量)。


正如 Leigh 下面所指出的,对于 cfspreadsheet 特定的行为,您还可以指定columnnames属性,以将列重命名为可直接访问的内容,例如

<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..>
于 2012-05-20T12:37:47.013 回答