2012-05-20 12 views
5

Używam cfspreadsheet czytać, aby przeczytać arkusz w obiekcie zapytania.Jak uzyskać dostęp do kolumny zapytania z wieloma wyrazami?

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

Problem polega na tym, że niektóre nagłówki zawierają więcej niż jedno słowo. Więc skończyć z kwerendy trochę tak:

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

Jeśli próby uzyskania dostępu do jednej z kolumn, które mają miejsce w nazwie kolumny, otrzymuję komunikat o błędzie.

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

Próbowałem również #[start date]#, ale to nie zadziałało. Nie mogę kontrolować formatu arkusza programu Excel, który otrzymuję. Czy jest jakiś sposób dostępu do kolumn z wieloma słowami-nagłówkami?

Odpowiedz

13

Przy użyciu notacji nawiasu zawartość musi skończyć jako ciąg, więc:

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


Jeśli nie używać cytatów, są przechodzącą w zmiennej, która odbywa się w taki sposób:

<cfset ColumnName = 'start date' /> 

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


Zauważ, że należy użyć nazwy zapytania przed nawiasami - jeżeli po prostu napisać [ColumnName] to jest notacja stworzenie tablicy inline, a nie dostępu do zmiennej.

Ponadto, jeśli przy użyciu tego poza pętlą zapytań (tj nie ciągu cfoutput/cfloop z atrybutem zapytań), należy również do zakresu zmiennej CurrentRow, tj

spreadsheetData[ColumnName][spreadsheetData.CurrentRow] 

(lub dostarczyć własne liczba jawna/zmienna).


Jak Leigh zauważa poniżej, dla zachowania cfspreadsheet specyficzny, można również określić atrybut columnnames, aby zmienić nazwę kolumny do czegoś bezpośrednio dostępnym, np

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

Oprócz odpowiedź Piotra, należy pamiętać, można również użyć 'columnNames' przypisywać przypisać różne nazwy kolumn, jeśli chcesz czyli' ". – Leigh

+0

@Peter - Kiedy próbuję twojego pierwszego kodu przykładowego otrzymuję błąd "Złożone typy obiektów nie mogą zostać przekonwertowane na proste wartości." – froadie

+1

@Peter - ten kod działa - ' # spreadsheetData ['data rozpoczęcia'] [currentRow] #'. Szkoda, że ​​nie było mniej wyraźnego sposobu, aby to zrobić ... – froadie

Powiązane problemy