2012-05-20 3 views
5

Ich verwende eine cfspreadsheet lesen, um ein Blatt in ein Abfrageobjekt zu lesen.Wie kann auf die Abfrage-Spalte mit mehreren Wörtern zugegriffen werden?

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

Das Problem ist, einige der Header enthalten mehr als ein Wort. So habe ich am Ende mit einer Abfrage ein bisschen wie auf dem Punkt:

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, eine der Spalten zuzugreifen, die einen Raum, in dem Spaltennamen haben, ich einen Fehler.

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

Ich habe #[start date]# versucht, so gut, aber das hat nicht funktioniert. Ich kann das Format des Excel-Blattes, das ich erhalte, nicht kontrollieren. Gibt es eine Möglichkeit, auf die mehrspaltigen Header-Spalten zuzugreifen?

Antwort

13

Wenn Klammer-Notation der Inhalt muss nach oben als String beenden, so:

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


Wenn Sie keine Anführungszeichen verwenden, werden Sie in einer Variablen vorbei, die wie so getan wird:

<cfset ColumnName = 'start date' /> 

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


Beachten Sie, dass Sie den Namen der Abfrage, bevor die Klammern verwenden müssen - wenn Sie einfach [ColumnName] schreiben, dann ist dies Inline-Array-Erstellung Notation, nicht die Variable zugreifen.

Auch wenn mit dieser außerhalb einer Abfrage Schleife (dh nicht innerhalb cfoutput/cfloop mit Abfrage-Attribut), müssen Sie auch Umfang der CurrentRow variabel, dh

spreadsheetData[ColumnName][spreadsheetData.CurrentRow] 

(oder Ihre eigene liefern explizite Nummer/Variable).


Als Leigh stellt fest, unten, für cfspreadsheet spezifisches Verhalten, können Sie auch das columnnames Attribut angeben, um die Spalte zu etwas direkt zugänglich zu benennen, zum Beispiel

<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..> 
+1

Neben Peter Antwort, bedenken Sie auch die 'columnNames' verwenden könnte Attribut unterschiedliche Spaltennamen zuweisen, wenn Sie also' wünschen '. – Leigh

+0

@Peter - Wenn ich Ihren ersten Beispielcode versuche, bekomme ich den Fehler "Komplexe Objekttypen können nicht in einfache Werte umgewandelt werden." – froadie

+1

@Peter - dieser Code funktioniert aber - ' # tabellenblattDaten ['startdatum'] [currentRow] #'. Ich wünschte, es gäbe einen weniger expliziten Weg, dies zu tun ... – froadie

Verwandte Themen