如何使用多个单词访问查询列?

fro*_*die 5 coldfusion cfspreadsheet

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

<cfspreadsheet action="read" src="TestExcel.xls" sheet="1" query="spreadsheetData" headerrow="1" excludeHeaderRow="true"> 
Run Code Online (Sandbox Code Playgroud)

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

ID  Name    Start Date  End Date
3   Test    1/1/2009    1/1/2013
17  Test 2  11/11/2010  11/11/2012
Run Code Online (Sandbox Code Playgroud)

如果我尝试访问列名中有空格的列之一,则会出错.

<cfoutput query="spreadsheetData">
   #start date#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

我也试过#[start date]#了,但那没用.我无法控制收到的Excel工作表的格式.有没有办法访问多文本标题列?

Pet*_*ton 14

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

<cfoutput query="spreadsheetData">
    #spreadsheetData['start date'][CurrentRow]#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)


如果你不使用引号,你传入一个变量,就像这样:

<cfset ColumnName = 'start date' />

<cfoutput query="spreadsheetData">
    #spreadsheetData[ColumnName][CurrentRow]#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)


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

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

spreadsheetData[ColumnName][spreadsheetData.CurrentRow]
Run Code Online (Sandbox Code Playgroud)

(或提供您自己的显式数字/变量).


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

<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..>
Run Code Online (Sandbox Code Playgroud)

  • @froadie - 是的,对于动态案例,Peter's是更好的整体/通用答案.FYI,IIRC你总是需要在使用查询和括号表示时使用行号,即`#query ["column"] [row] #`,无论你是否在查询循环中. (3认同)
  • 除了彼得的回答,请记住,如果您愿意,您还可以使用 `columnNames` 属性来分配不同的列名,即 `&lt;cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..&gt; `. (2认同)