0

我不知道发生了什么事。我正在使用 cfspreadsheet 通过简单的选择查询将 Oracle 12c db 中的数据导出到 Excel:

    <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 也保持不变。在浏览器中查看时,数据显示正确。从数据库直接导出也显示正确的数据。我可以理解前导 0 消失,但不是字母。

我在数据库中重新输入了问题目录号,以确保没有多余的字符,但无济于事。如果我在目录号前添加单引号,则显示是正确的,只是我不能在输出中显示单引号。

我用 CF9 和 CF11 得到相同的结果。我什至无法判断问题出在 cfspreadsheet 还是 xlxs 上。有什么好主意吗?谢谢!

4

1 回答 1

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)将“F”和“D”解释为特殊文字,指示值是浮点数:

浮点文字

如果浮点字面量以字母F or结尾,则它的类型为浮点型f;否则它的类型是 double 并且可以选择以字母D或. 结尾d

因此,您的字符串正在转换为数字。这就是前导零和尾随“F”或“D”消失的原因。

于 2016-10-12T01:33:08.550 回答