2016-11-22 29 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ファイルを取得するために使用されるコードをSI:

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

それから私は、.txtファイルを取得するためにFileWrite()を使用:

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

上記のコードは、私に、タブ区切りのテキストファイルを与えたが、 1つの問題が発生しました。フィールドの値が空の場合、それらの列は消えました。たとえば、GENDER列に値がない場合、その列は作成されませんでした。

Mike Johns 01/12/98 
+0

ドリルを知るのに十分な時間がありました;-)これまでに試したコードを投稿してください。 – Leigh

+0

@最近の質問が更新されました。 –

+1

私はCFにRFC 4180準拠の機能はないと思っています( 'cfspreadsheet action =" write "'はかなりjankyです)。自分で関数を書く必要があります。ヒント:空の列だけではなく、クエリ値内のタブと改行を考えることができます。 – 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上記のコードを試しましたが、最初の問題はデータの各行間に余分な行です。 2番目の問題はすべてのデータが同じセルにあり、タブ区切りコマンドがListAppend()のコード行で動作しないように見えます。 –

関連する問題