2016-11-22 3 views
1

Ich habe query mit cfspreadsheet erstellt. Jetzt frage ich mich, ob es möglich ist, Abfrage zu Tab-getrennte Textdatei zu konvertieren. Dies ist mein Code, um die Abfrage zu erhalten:Wie erstellt man tabulatorgetrennte Textdateien von cfquery?

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

Hier ist die Liste meiner Aufzeichnungen aus Excel in cfquery vertreten:

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 

ich meine Textdatei wie folgt aussehen würde, wenn möglich:

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

Tabulatortrennzeichen zwischen den Werten und \ n, um Newline zu erstellen. Ich habe versucht, .csv, aber ich konnte Datei nicht organisiert bekommen, wie ich oben gezeigt habe. Auch wenn es eine andere Möglichkeit gibt, .xlsx Datei in .txt zu konvertieren, lass es mich wissen. Ich suchte xp_cmdshell Befehle, aber es gibt nichts, das in meinem Fall hilfreich wäre.

Hier si den Code, den ich CSV-Datei zu erhalten verwendet:

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

Dann habe ich FileWrite() .txt-Datei zu erhalten:

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

-Code gab mir über Tabulator getrennte Textdatei aber Ein Problem trat auf, wenn der Wert im Feld leer war, verschwanden diese Spalten. Zum Beispiel, wenn ich keinen Wert in meiner Spalte GENDER hatte, wurde diese Spalte nicht erstellt.

+0

Sie haben schon lange genug um den Bohrer zu wissen ;-) Bitte senden Sie den Code Sie bisher versucht haben. – Leigh

+0

@Leigh Frage aktualisiert. –

+1

Ich glaube nicht, dass es RFC 4180-konforme Funktionen in CF gibt ('cfspreadsheet action =" write "' ist ziemlich janky). Sie müssen eine Funktion selbst schreiben. Tipp: Es gibt mehr als nur leere Spalten, denken Sie an Tabulatoren und Zeilenumbrüche in Ihren Abfragewerten. – Alex

Antwort

1

Sie können dies wörtlich als eine Frage der Konvertierung eines Abfrageergebnissatzes in eine tabulatorgetrennte CSV-Datei sehen. Das heißt, ohne Beteiligung von cfspreadsheet. Sie erhalten eine Antwort erhalten, indem leicht the answer I gave to a similar question from you ändern:

<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

Warum verwenden Sie ein HTML-Tag für einen Wagenrücklauf? –

+0

@DanBracuk Können wir chr (13) oder chr (10) verwenden? –

+0

@BKBK Ich habe Code oben versucht und das erste Problem ist eine zusätzliche Zeile zwischen jeder Datenzeile. Zweites Problem alle Daten sind in der gleichen Zelle, sieht aus wie Tabulator-Trennzeichen-Befehl funktioniert nicht in Code-Zeile, wo ListAppend(). –

Verwandte Themen