2016-05-03 7 views
0

ich kann nicht herausfinden, was los ist. Ich bin Daten aus unserer Oracle 12c db in Excel aus einer einfachen SELECT-Abfrage zu exportieren, mit cfspreadsheet:cfspreadsheet xlsx schreiben kürzt einige Daten

<cfset var_filenameis = "report.xlsx"> 
    <cfset SpreadsheetObj = spreadsheetNew("true")> 
    <cfset SpreadsheetObj = spreadsheetNew("#var_filenameis#","yes")>  
    <cfspreadsheet action="write" filename="#var_filenameis#" query="get_data" overwrite="true">  
    <cflocation url = "#var_filenameis#"> 

Einer Datenspalte enthält Katalognummern in verschiedenen Formaten. Einige von ihnen werden abgeschnitten, wenn sie nach xlsx exportiert werden. Zum Beispiel wird 02923F zu 2923 und 08552D wird zu 8552. 08566A bleibt jedoch 08566A und 02584C bleibt auch gleich. Die Daten werden korrekt angezeigt, wenn sie im Browser angezeigt werden. Der direkte Export aus der Datenbank zeigt auch korrekte Daten an. Ich konnte die führende 0 verschwinden, aber nicht den Brief.

Ich habe das Problem Katalognummern in der DB erneut eingegeben, um sicherzustellen, gibt es keine zusätzlichen Zeichen waren, ohne Erfolg. Wenn ich ein einzelnes Anführungszeichen vor der Katalognummer anlege, ist die Anzeige korrekt, außer dass ich kein einziges Anführungszeichen in der Ausgabe anzeigen kann.

ich das gleiche Ergebnis mit CF9 und CF11. Ich kann nicht einmal sagen, ob das Problem mit cfspreadsheet oder xlxs ist. Irgendwelche guten Ideen? Vielen Dank!

+0

Leider wurde diese Frage aufgrund der Tags wahrscheinlich übersehen. Zukünftige Referenz, CF-Fragen erhalten mehr Aufmerksamkeit, wenn Sie die "Coldfusion" -Tag (oder zumindest eine versionsspezifische Variante, dh "Coldfusion-2016"). – Leigh

Antwort

0

(Zu lang für Kommentare)

Wenn Sie CF11 verwenden, versuchen SpreadSheetAddRows statt cfspreadsheet verwenden. Es ist ein wenig intelligenter und verwendet die Datentypen der Abfrage-Spalten, um den richtigen Zelltyp zu bestimmen. Solange die Abfrage-Spalte eine Art VARCHAR ist, bleibt der String-Wert erhalten.

<!--- sample data ---> 
<cfset qData = queryNew("")> 
<cfset queryAddColumn(qData, "StringValue", "varchar", ["02923F","08552D","08566A","02584C"])> 

<!--- populate sheet ---> 
<cfset sheet = SpreadsheetNew("Sheet1", true)> 
<cfset spreadSheetAddRows(sheet, qData)> 

<!--- display results ---> 
<cfheader name="Content-Disposition" value="attachment;filename=testFile.xlsx"> 
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#SpreadSheetReadBinary(sheet)#"> 

ich kann nicht herausfinden, was

ist los Es ist, weil POI (oder möglicherweise CF) interpretiert die „F“ und „D“ als special literals schweben die Werte, die Punkt Zahlen:

Gleitpunktliterale

Gleitkommadivisionsschaltung Literal ist vom Typ float, wenn es mit dem Buchstaben F oder f endet; sonst seine Art ist doppelt und es kann optional mit dem Brief D oder d beenden.

So werden Ihre Strings in Zahlen umgewandelt. Deshalb verschwinden die führenden Null- und Nachlauf-"F" oder "D".