2012-05-20 52 views
5

Tôi đang sử dụng một bảng tính đã đọc để đọc một trang tính vào một đối tượng truy vấn.Cách truy cập cột truy vấn bằng nhiều từ?

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

Vấn đề là một số tiêu đề chứa nhiều từ. Vì vậy, tôi kết thúc với một truy vấn một chút như thế này:

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

Nếu tôi cố gắng truy cập một trong các cột có khoảng trống trong tên cột, tôi gặp lỗi.

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

Tôi cũng đã thử #[start date]# nhưng điều đó không hiệu quả. Tôi không thể kiểm soát định dạng của bảng excel mà tôi nhận được. Có cách nào để truy cập các cột có nhiều từ tiêu đề không?

Trả lời

13

Khi sử dụng ký hiệu khung nội dung phải kết thúc như là một chuỗi, vì vậy:

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


Nếu bạn không sử dụng dấu ngoặc kép, bạn đang đi qua trong một biến, được thực hiện như sau:

<cfset ColumnName = 'start date' /> 

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


Lưu ý rằng bạn phải sử dụng tên truy vấn trước dấu ngoặc vuông - nếu bạn chỉ đơn giản là viết [ColumnName] thì đây là ký hiệu inline tạo mảng, không truy cập vào biến.

Ngoài ra, nếu sử dụng bên ngoài này của một vòng lặp truy vấn (ví dụ không trong cfoutput/cfloop với thuộc tính truy vấn), bạn cũng cần phải phạm vi các CurrentRow biến, tức là

spreadsheetData[ColumnName][spreadsheetData.CurrentRow] 

(hoặc cung cấp riêng của bạn số/biến rõ ràng).


Như Leigh lưu ý bên dưới, đối với hành vi cụ thể theo bảng tính, bạn cũng có thể chỉ định thuộc tính columnnames, để đổi tên cột thành nội dung có thể truy cập trực tiếp, ví dụ:

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

Ngoài câu trả lời của Peter, hãy nhớ bạn cũng có thể dùng lệnh 'columnNames' thuộc tính gán tên cột khác nhau nếu bạn muốn tức là' '. – Leigh

+0

@Peter - Khi tôi thử mã mẫu đầu tiên của bạn, tôi nhận được lỗi "Các loại đối tượng phức tạp không thể được chuyển đổi thành các giá trị đơn giản." – froadie

+1

@Peter - mã này hoạt động mặc dù - ' # spreadsheetData ['ngày bắt đầu'] [currentRow] #'. Tôi muốn có một cách ít rõ ràng hơn để làm điều này mặc dù ... – froadie

Các vấn đề liên quan