2016-11-22 84 views
1

我使用cfspreadsheet创建了query。现在我想知道是否可以将查询转换为制表符分隔的文本文件。这是我的代码来获取查询:如何从cfquery创建制表符分隔的文本文件?

<cfspreadsheet action="read" src="C:\myFiles\Records.xlsx" query="myQuery" headerrow="1"> 

这里是从Excel我的记录列表中CFQUERY表示:

FIRST_NAME LAST_NAME DOB  GENDER 
1 FIRST_NAME LAST_NAME DOB  GENDER 
2 Mike Johns 01/12/98 M 
3 Helen Johns 2/2/01 F 

我想我的文本文件看起来像这样如果可能的话:

FIRST_NAME LAST_NAME DOB  GENDER 
Mike Johns 01/12/98 M 
Helen Johns 2/2/01 F 

创建换行符时值与\ n之间的制表符分隔符。我试过.csv,但我无法按照上面显示的方式获取文件。此外,如果有任何其他方式将.xlsx文件转换为.txt请让我知道。我正在寻找xp_cmdshell命令,但没有任何对我的情况有所帮助。

这里对我用来获取.csv文件中的代码:

<cfspreadsheet action="read" format="csv" src="C:\myFiles\Records.xlsx" name="myCsv"> 

然后我用FileWrite()得到.txt文件:以上

<cfscript> 
    FileWrite("C:\myFiles\Records.txt", "#myCsv#"); 
</cfscript> 

代码给我制表符分隔的文本文件,但发生了一个问题,如果该字段中的值为空,则这些列消失。例如,如果我在我的GENDER列中没有价值,则该列未创建。

Mike Johns 01/12/98 
+0

你已经足够长的时间知道该怎么做;-)请张贴到目前为止,你已经尝试的代码。 – Leigh

+0

@Leigh问题已更新。 –

+1

我不认为在CF中有任何符合RFC 4180的函数('cfspreadsheet action =“write”'相当好笑)。你必须自己写一个函数。提示:除了空列以外,还可以考虑查询值中的制表符和换行符。 – Alex

回答

1

从字面上看,这可能会将查询结果集转换为制表符分隔的CSV文件。也就是说,没有cfspreadsheet的参与。您将通过稍微修改the answer I gave to a similar question from you得到一个答案:

<cfspreadsheet 
action = "read" 
src="C:\myFiles\Records.xlsx" 
query="excelquery" 
sheet="1"> 

<!--- Create CSV file in current directory---> 
<cffile action="write" file="#expandpath('result.csv')#" output=""> 

<cfset columns = arraynew(1)> 
<cfset columns = listToArray(excelquery.ColumnList)> 

<cfoutput query="excelquery"> 
<cfset rowList = ""> 

<cfloop from="1" to="#arraylen(columns)#" index="n"> 
    <cfset colName = columns[n]> 
    <cfset cellData = evaluate("#colName#[currentrow]")> 

    <!--- Tab-separated row data ---> 
    <cfset rowList = listAppend(rowList,cellData,chr(9))> 
</cfloop> 

<!--- Place carriage-return at end of row ---> 
<cfset rowList = rowList & '<br>'> 

<!--- Append row to CSV file ---> 
<cffile action="append" file="#expandpath('result.csv')#" output="#rowList#" > 
</cfoutput> 
+0

为什么你使用html标签作为回车? –

+0

@DanBracuk我们可以使用chr(13)或chr(10)吗? –

+0

@BKBK我已经尝试过上面的代码,第一个问题是每行数据之间的额外行。第二个问题所有的数据都在同一个单元格中,看起来像tab分隔符命令在ListAppend()所在的行中不起作用。 –

相关问题