我正在使用Coldfusion 10并且我有一个测试代码来创建电子表格并格式化值为“8:30”的列,以格式化“h:mm”。 代码如下:
<cfset sObj = spreadsheetNew("true")>
<CFSET SpreadsheetFormatCell(sObj,{dataFormat="h:mm", alignment="right"}, 1, 2)>
<CFSET timehmm = "8:30">
<cfset spreadsheetSetCellValue(sObj,"#timehmm#", 1, 2)>
<cfset SpreadSheetSetColumnWidth(sObj, 2, 11)>
<cfspreadsheet action="write" name="sObj" filename="..\TEST.xlsx" overwrite="true">
<cflocation url="EXCEL/TEST.xlsx" addtoken="no">
问题是,在excel文件中,我点击值为8:30的列,插入功能输入框中显示的值是8:30,它应该是'8:30:00 AM',因为我已格式化此单元格。
如果我输入具有相同值'8:30'的相同单元格,我再次单击该单元格。我可以看到插入功能框中的值是正确的,即'8:30:00 AM'。
请帮助指出我的代码有什么问题,因为我需要将此格式设置为单元格,以便稍后总结。目前,该单元格似乎已被识别为文本格式,无法求和。
感谢。
答案 0 :(得分:1)
我认为代码本身并没有做错任何事。我认为单独使用基本的CF10功能是不可能的。 CF似乎隐式地正确处理日期/时间字符串,但不是“时间”字符串。使用the new datatype
parameter可以在CF11中支持 。
解决方法是使用POI DateUtil类将时间字符串转换为Excel可以解释的数值。注意:时间字符串必须使用24小时制
<cfset sObj = spreadsheetNew("true")>
<cfset util = createObject("java", "org.apache.poi.ss.usermodel.DateUtil")>
<cfset SpreadsheetFormatCell(sObj,{dataFormat="h:mm"}, 1, 2)>
<cfset timeValue = util.convertTime("8:30")>
<cfset spreadsheetSetCellValue(sObj, timeValue, 1, 2)>
答案 1 :(得分:0)
根据文档,h:mm AM / PM是与h:mm不同的格式。你试过h:mm AM / PM吗?