Wie greife ich auf eine Abfragespalte mit mehreren Wörtern zu?
-
12-12-2019 - |
Frage
Ich verwende einen cfspreadsheet-Lesevorgang, um ein Blatt in ein Abfrageobjekt einzulesen.
<cfspreadsheet action="read" src="TestExcel.xls" sheet="1" query="spreadsheetData" headerrow="1" excludeHeaderRow="true">
Das Problem besteht darin, dass einige Überschriften mehr als ein Wort enthalten.Am Ende habe ich eine Abfrage, die ungefähr so aussieht:
ID Name Start Date End Date
3 Test 1/1/2009 1/1/2013
17 Test 2 11/11/2010 11/11/2012
Wenn ich versuche, auf eine der Spalten zuzugreifen, deren Spaltenname ein Leerzeichen enthält, erhalte ich eine Fehlermeldung.
<cfoutput query="spreadsheetData">
#start date#
</cfoutput>
ich habe es versucht #[start date]#
auch, aber das hat nicht funktioniert.Ich kann das Format der Excel-Tabelle, die ich erhalte, nicht steuern.Gibt es eine Möglichkeit, auf die Spalten mit mehreren Wortüberschriften zuzugreifen?
Lösung
Bei Verwendung der Klammernotation muss der Inhalt als Zeichenfolge enden, also:
<cfoutput query="spreadsheetData">
#spreadsheetData['start date'][CurrentRow]#
</cfoutput>
Wenn Sie keine Anführungszeichen verwenden, übergeben Sie eine Variable, was folgendermaßen geschieht:
<cfset ColumnName = 'start date' />
<cfoutput query="spreadsheetData">
#spreadsheetData[ColumnName][CurrentRow]#
</cfoutput>
Beachten Sie, dass Sie den Abfragenamen vor den Klammern verwenden müssen – wenn Sie einfach schreiben [ColumnName]
Dann handelt es sich um eine Inline-Array-Erstellungsnotation, nicht um den Zugriff auf die Variable.
Auch wenn dies außerhalb einer Abfrageschleife verwendet wird (d. h. nicht innerhalb cfoutput
/cfloop
mit Abfrageattribut), müssen Sie auch den Bereich festlegen CurrentRow
variabel, d.h.
spreadsheetData[ColumnName][spreadsheetData.CurrentRow]
(oder geben Sie Ihre eigene explizite Nummer/Variable an).
Wie Leigh unten anmerkt, können Sie für cfspreadsheet-spezifisches Verhalten auch Folgendes angeben columnnames
Attribut, um die Spalte in etwas umzubenennen, auf das direkt zugegriffen werden kann, z. B.
<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..>