首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cfspreadsheet写入xlsx会截断某些数据

cfspreadsheet写入xlsx会截断某些数据
EN

Stack Overflow用户
提问于 2016-05-04 05:36:32
回答 1查看 182关注 0票数 0

我搞不懂发生了什么事。我使用cfspreadsheet通过一个简单的select查询将数据从Oracle 12c数据库导出到Excel:

代码语言:javascript
复制
    <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上。有什么好主意吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-10-12 09:33:09

(评论太长)

如果您使用的是CF11,请尝试使用SpreadSheetAddRows而不是cfspreadsheet。它更智能一些,使用查询列的数据类型来确定适当的单元格类型。只要查询列是某种类型的VARCHAR,字符串值就会被保留。

代码语言:javascript
复制
<!--- 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,表示值是浮点数:

浮点文字

如果浮点文字以字母Ff结尾,则它的类型为float;否则,它的类型为double,并且可以选择以字母Dd结尾。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37014799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档