我搞不懂发生了什么事。我使用cfspreadsheet通过一个简单的select查询将数据从Oracle 12c数据库导出到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也保持不变。在浏览器中查看时,数据会正确显示。从DB直接导出也会显示正确的数据。我可以理解前导0的消失,但不能理解字母的消失。
我已经在数据库中重新输入了问题目录号,以确保没有额外的字符,但没有用。如果我在目录号前面添加单引号,则显示是正确的,只是我不能在输出中显示单引号。
我用CF9和CF11得到了同样的结果。我甚至不知道问题出在cfspreadsheet还是xlxs上。有什么好主意吗?谢谢!
发布于 2016-10-12 09:33:09
(评论太长)
如果您使用的是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”解释为special literals,表示值是浮点数:
浮点文字
如果浮点文字以字母F或f结尾,则它的类型为float;否则,它的类型为double,并且可以选择以字母D或d结尾。
因此,您的字符串将被转换为数字。这就是前导零和尾随的"F“或"D”消失的原因。
https://stackoverflow.com/questions/37014799
复制相似问题