我有一個查詢,我循環並追加到數組。循環完成後,我使用帶有製表符分隔符的ArrayToList()
。問題是每行之間我有一個額外的空列。我的猜測是該命令將最後一個逗號轉換爲製表符分隔符。我仍然無法找到防止這種情況的方法。這裏是我的代碼:ArrayToList()ColdFusion?
<cfspreadsheet action="read" src="#urlPath#\Roster.xlsx" query="excelData" headerrow="1">
<cfset metadata = getMetaData(excelData)>
<cfset colList = "">
<cfloop index="col" array="#metadata#">
<cfset colList = listAppend(colList, col.name)>
</cfloop>
<cfset buffer=ArrayNew(1)>
<cfset crlf=chr(13)&chr(10)/>
<cfoutput query="excelData">
<cfloop index="i" list="#colList#">
<cfset ArrayAppend(buffer,excelData[i][currentRow])>
</cfloop>
//prevents blank row to be created on the end
<cfif excelData.currentrow eq excelData.recordcount>
<cfset ArrayAppend(buffer,"")>
<cfelse>
<cfset ArrayAppend(buffer,crlf)>
</cfif>
</cfoutput>
//setting tab delimiter
<cfset test = arrayToList(buffer,chr(9))/>
<cfscript>
FileWrite("#urlPath#\Test_Text.txt", "#test#");
</cfscript>
下面是輸出後,我運行此代碼:
這裏是什麼,我需要我的輸出看起來像:
我選擇ArrayAppend()
,因爲它比ListAppend()
快得多,如果任何人都可以提供幫助請讓我知道。謝謝。
如果我緩衝器陣列的cfdump這是輸出:
array
1 LAST_NAME
2 FIRST_NAME
3 BIRTH_DATE
4
5 Milos
6 TestOne
7 11/16/97
8
看起來像之間的每一行是空白行4和8這是我的固定日期格式問題:
<cfoutput query="excelData">
<cfset thisRow = []>
<cfset count = 1>
<cfloop index="i" list="#colList#">
<cfif count EQ 3 AND excelData[i][currentRow] NEQ "BIRTH_DATE">
<cfset ArrayAppend(thisRow,dateFormat(excelData[i][currentRow],"mm/dd/yyyy"))>
<cfelse>
<cfset ArrayAppend(thisRow,excelData[i][currentRow])>
</cfif>
<cfset count++>
</cfloop>
<cfset ArrayAppend(buffer,arrayToList(thisRow, chr(9)))>
</cfoutput>
哦,不,你的陣列,例如,'[ '李四', '約翰', '1/1/1900' 的,CRLF , '李四', '簡', '1/1/1900']'。如果你在每個值之間加上一個製表符,'crlf'前後都會有一個製表符。我建議爲工作表中的每一行創建一個單獨的字符串以插入緩衝區(仍然可以使用arrayAppend然後在輸出循環中使用arrayToList),然後使用'crlf'作爲分隔符的最終arrayToList,從而不需要其他如果聲明。 –
我生成了類似的基於CSV/TAB的導出...您應該修剪數據並從您添加到陣列中的值中剝離預先存在的TAB。我還遇到了Excel/Word中不可見的非破壞空格chr(160)的主要問題。關於日期,我有混合成功,喜歡使用「yyyy-mm-dd」或「m/d/yyyy」(年份使用4位數字,或者某些應用程序不會將該值視爲有效日期。) –
@JamesMoberg你使用ColdFusion trim()函數還是其他的?還有你用dateFormat()來解決日期問題? –