我有一個來自客戶端的請求,用於從查詢生成Excel電子表格。我有查詢踢出的領域,我可以生成Excel文件沒有順利。當客戶端接受該Excel文件並嘗試操作時,問題就出現了。無法使用ColdFusion創建適當的Excel電子表格
大部分麻煩來自於應標記爲貨幣或日期字段。我有一些掙扎,能夠產生一個「真正的」日期字段。在這個Excel沒有正確排序日期之前。我可以使用下面的代碼來調用Excel公式。 DateValue
強制Excel將其確認爲真實的日期字段。但是,這個文件通過Excel進行操作時失敗。
<cfset SpreadsheetSetCellFormula(s
,"DATEVALUE(#Chr(34)##Replacement_ETD##Chr(34)#)"
, therow
, 9)>
接下來的問題是貨幣字段。我無法讓Excel將價值確認爲貨幣。它總是出現習慣。設置此項時,SUM
函數在Excel中不起作用。您可以單獨添加字段,如A1+B1+C1 = TOTAL
。但是,如果有200行,這將不會有幫助。
我能夠從另一個CF程序員誰也有類似的情況得到的建議。他首先用正確的標題生成Excel文件,並將列設置爲適當的字段,如日期和貨幣等。
下一步將是逐行填寫字段,並且它們應該被正確格式化。
代碼:
<cfset filename = expandPath("./reports/arrivals.xlsx")>
<cfspreadsheet action="read" src = "#filename#" name = "s" >
<cfset therow = 0>
<cfoutput query="myExcel" startrow="1">
<cfset therow = myExcel.currentrow + 1>
<cfset SpreadsheetSetCellValue(s, Incumbent, therow, 1)>
<cfset SpreadsheetSetCellValue(s, Section, therow, 2)>
<cfset SpreadsheetSetCellValue(s, Position_Number, therow, 3)>
<cfset SpreadsheetSetCellValue(s, Position_Title, therow, 4)>
<cfset SpreadsheetSetCellValue(s, Incumbent_Emplyment_Type, therow, 5)>
<cfset SpreadsheetSetCellValue(s, Incumbent_ETD, therow, 6)>
<cfset SpreadsheetSetCellValue(s, Tour_Comments, therow, 7)>
<cfset SpreadsheetSetCellValue(s, Replacement, therow, 8)>
<cfset SpreadsheetSetCellValue(s, Replacement_ETA, therow, 9)>
</cfoutput>
<cfheader name="content-disposition" value="attachment; filename=Departures_(#DateFormat(now(),'mmddyy')#).xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true">
的數據在細胞已經被正確格式化。當此文件生成並流式傳輸給用戶時,列未按預期格式化。
沒有任何人知道,如果這個方法將工作或在得到CF產生一個適當的日期和貨幣領域爲Excel承認一個更好的建議?這裏RHEL 5
每請求
Adobe ColdFusion,請V10跑是使用queryNe
瓦特將生成代碼日期和貨幣的一些代碼。
步驟一:我創建了第一排凍結Excel文件,它有列標題。第一列已被指定爲格式爲長日期的日期 - mm/dd/yyy;第二列是已設定爲貨幣的美元。
我讀文件,然後填寫行和文件流給用戶下載。
<cfset filename = expandPath("./reports/Test.xlsx")>
<cfspreadsheet action="read" src = "#filename#" name = "s" >
<cfset myQuery = QueryNew("MyDate, Dollar", "Date, Decimal")>
<cfset newRow = QueryAddRow(MyQuery, 5)>
<cfset temp = QuerySetCell(myQuery, "MyDate", "03-11-2000", 1)>
<cfset temp = QuerySetCell(myQuery, "Dollar", "403.45", 1)>
<cfset temp = QuerySetCell(myQuery, "MyDate", "01-01-2009", 2)>
<cfset temp = QuerySetCell(myQuery, "Dollar", "603.22", 2)>
<cfset temp = QuerySetCell(myQuery, "MyDate", "09-21-2013", 3)>
<cfset temp = QuerySetCell(myQuery, "Dollar", "103.55", 3)>
<cfset temp = QuerySetCell(myQuery, "MyDate", "01-15-2005", 4)>
<cfset temp = QuerySetCell(myQuery, "Dollar", "3.33", 4)>
<cfset temp = QuerySetCell(myQuery, "MyDate", "07-22-2003", 5)>
<cfset temp = QuerySetCell(myQuery, "Dollar", "13.75", 5)>
<cfset therow = 0>
<cfoutput query="myQuery" startrow="1">
<cfset therow = myQuery.currentrow + 1>
<cfset SpreadsheetSetCellValue(s, DateFormat(MyDate, 'mm/dd/yyyy'), therow, 1)>
<cfset SpreadsheetSetCellValue(s, Dollar, therow, 2)>
#myQuery.currentrow# <br>
#myQuery.MyDate# <br>
#myQuery.Dollar# <br>
</cfoutput>
<cfheader name="content-disposition" value="attachment;
filename=Departures_(#DateFormat(now(),'mmddyy')#).xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true">
您可以在MS Excel或Google表格中打開該文件。測試一個,第一行凍結,我們應該能夠在日期字段上排序。我的結果是:日期未正確排序。在貨幣列2上,如果我們試着去做一個可以工作的SUM!這以前並沒有奏效,但現在它已經完成。
此外,當我嘗試打開我給出的警告,這文件已損壞,Excel將嘗試打開該文件。 Google表格中沒有這樣的警告。
像「失敗」測試工作示例和「行不通」是很曖昧。你可以請提供一個我們可以測試的小型[* stand-alone * example](http://stackoverflow.com/help/mcve),它能證明這個問題?提示,你可以使用'QueryNew()'生成一個手動查詢,所以這個例子不需要數據庫查詢。 – Leigh
@好的東西。我將鞭打起來,舉例並編輯帖子。 – weggie
@Leigh代碼更新了一個例子和我的測試結果。謝謝。 – weggie