CFSpreadsheet日期格式问题

时间:2013-09-04 19:26:05

标签: excel sql-server-2008 datetime coldfusion cfspreadsheet

我在本地运行ColdFusion 10并且遇到了最近从Oracle转换为MSSQL的数据库的两个问题。

我要做的是使用cfspreadsheet将数据库中的数据输出到电子表格中。表中有3列,其中包含日期/时间戳。

问题#1:代码在转换之前工作正常,但在转换之后,所有日期/时间戳都以科学记数法格式显示。我已尝试使用强制转换修改我的CFQUERY,但所有这一切都是将日期/时间戳字段显示为'YYYY / MM / DD'而不是我想要的格式,即'MM / DD / YYYY HH:MM AM / PM “。当我双击excel中的单元格时,我看到了正确的格式,但默认情况下它显示为“YYYY / MM / DD”。这里有什么建议?

问题#2:如果应该使用我指定的日期/时间格式的列或特定单元格为空或为空,我收到''是无效的日期或时间字符串错误。

以下是我在cfquery中用于CAST / CONVERT的内容:

            ,CAST(CONVERT(varchar(20), GYMSTARTDATE, 22) AS datetime) AS GymStartDateTime
        ,CAST(CONVERT(varchar(20), GYMENDDATE, 22) AS datetime) AS GymEndDateTime

2 个答案:

答案 0 :(得分:1)

如果你弄清楚了,请告诉我。这是我在2011年提供的示例代码的链接。它不适用于ColdFusion 9或10.我还列出了所有官方的“内置”(但不支持)日期格式。

http://pastebin.com/aQnembR3

<cfset q = queryNew("Name,Date", "varchar,date")>
<cfloop index="x" from="1" to="10">
    <cfset queryAddRow(q)>
    <cfset querySetCell(q, "Name", "Name #x#")>
    <cfset querySetCell(q, "Date", now())>
</cfloop>

<cfset dfStyle = {dataformat = "m/d/yy h:mm"}>

<cfset o = spreadsheetNew('dateTest', true)>
<cfset spreadsheetAddRows(o, q)>
<cfset spreadsheetFormatColumn(o, dfStyle, 2)>

<cfset bin = spreadsheetReadBinary(o)>

<cfheader name="Content-Disposition" value="attachment; filename=dateTest_#dateFormat(now(), 'ddmmmyyyy')#.xlsx">
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#bin#" reset="true">

答案 1 :(得分:1)

如果没有看到数据样本和实际代码,很难说。但是,我尝试重现您在CF10和SQL Server 2005中描述的问题,但不能。所有值都显示为字符串,而不是科学记数法。

听起来您的数据或环境中存在我们不了解的不同内容。请汇总一个重现问题的小例子,我们可以进一步调试。

测试1:

<!--- raw dates --->
<cfquery name="qry" datasource="#dsn#">
    SELECT  StartDate, EndDate
    FROM    YourTable
</cfquery>

<cfspreadsheet action="write" 
      filename="c:/test.xls" 
      query="qry" 
      overwrite="true" /> 

结果1:(单元格类型:常规)

STARTDATE                   ENDDATE
2013-08-20 14:19:28.907     2013-09-03 14:19:28.907
2013-08-25 14:19:30.293     2013-09-03 02:19:30.293

测试2:

<!--- convert / datetime --->
<cfquery name="qry" datasource="#dsn#">
SELECT CAST(CONVERT(varchar(20), StartDate, 22) AS datetime) AS GymStartDateTime
          , CAST(CONVERT(varchar(20), EndDate, 22) AS datetime) AS GymEndDateTime
FROM   YourTable
</cfquery>

<cfspreadsheet action="write" 
      filename="c:/test2.xls" 
      query="qry"  
      overwrite="true" /> 

结果2:(单元格类型:常规)

GYMSTARTDATETIME            GYMENDDATETIME
2013-08-20 14:19:28.0       2013-09-03 14:19:28.0
2013-08-25 14:19:30.0       2013-09-03 02:19:30.0

测试3:

<!--- convert / string --->
<cfquery name="qry" datasource="#dsn#">
SELECT  CONVERT(varchar(20), StartDate, 22) AS GymStartDateTime
           , CONVERT(varchar(20), EndDate, 22) AS GymEndDateTime
FROM   YourTable
</cfquery>

<cfspreadsheet action="write" 
      filename="c:/test3.xls" 
      query="qry" 
      overwrite="true" /> 

结果3:(单元格类型:常规)

GYMSTARTDATETIME            GYMENDDATETIME
08/20/13  2:19:28 PM        09/03/13  2:19:28 PM
08/25/13  2:19:30 PM        09/03/13  2:19:30 AM