2016-05-03 14 views
0

何が起きているのかわかりません。私はcfspreadsheetを使用して、簡単な選択クエリからExcelに私たちのOracle 12cのDBからデータをエクスポートしています。データのcfspreadsheetからxlsxへの書き込みでデータが切り捨てられる

<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#"> 

一つの列には、さまざまな形式でのカタログ番号が含まれています。 xlsxにエクスポートすると、一部が切り捨てられます。たとえば、02923Fは2923になり、08552Dは8552になります。ただし、08566Aは08566Aと02584Cのままです。ブラウザで表示するとデータが正しく表示されます。 DBから直接エクスポートすると正しいデータも表示されます。私は先導0が消えているが、手紙は理解できませんでした。

DBに問題のカタログ番号を再入力して、余分な文字が無かったことを確認しました。カタログ番号の前に一重引用符を追加すると、出力に一重引用符を付けることができないという点を除いて、表示は正しいです。

私はCF9とCF11で同じ結果になります。問題がcfspreadsheetまたはxlxsであるかどうかはわかりません。良いアイデア?ありがとう!

+0

残念ながら、この質問はおそらくタグのために見落とされていました。将来の参照のために、 "coldfusion"タグ(または少なくともバージョン固有の亜種、 "coldfusion-2016")を含めると、CF関連の質問にもっと注意が払われます。 – Leigh

答えて

0

(コメントが長すぎます)

あなたはCF11を使用している場合は、SpreadSheetAddRows代わりのcfspreadsheetを使用してみてください。それはちょっと賢く、クエリ列のデータ型を使って適切なセルタイプを決定します。クエリ列がある種のVARCHARである限り、文字列の値は保持されます。

<!--- 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)#"> 

私は

に何が起こっているのかを把握することはできませんPOI(またはおそらくCF)は浮動小数点ている値を示すspecial literalsとして「F」と「D」を解釈するためです番号:

浮動小数点リテラル

浮動小数点型リテラルは、浮動小数点型で、文字がF またはfで終わる場合はfloat型です。そうでない場合はそのタイプはdoubleであり、オプションで の文字のDまたはdで終了することができます。

文字列が数値に変換されています。そのため、先頭のゼロと末尾の「F」または「D」が消えてしまいます。

関連する問題