Как получить доступ к столбцу запроса с несколькими словами?
Я использую чтение cfspreadsheet, чтобы прочитать лист в объект запроса.
<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, который я получаю. Есть ли способ получить доступ к столбцам с несколькими заголовками?
1 ответ
При использовании скобочных обозначений содержимое должно заканчиваться строкой, поэтому:
<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]
(или укажите свой собственный явный номер / переменную).
Как отмечает Ли ниже, для поведения, характерного для cfspreadsheet, вы также можете указать columnnames
атрибут, чтобы переименовать столбец во что-то напрямую доступное, например
<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..>