2013-09-04 4 views
1

Я запускаю ColdFusion 10 локально и выполняю две проблемы с базой данных, которая была недавно преобразована из Oracle в MSSQL.CFSpreadsheet Ошибка форматирования даты

Что я пытаюсь сделать, это вывод данных из базы данных в электронную таблицу с использованием cfspreadsheet. В таблице есть 3 столбца, и они содержат дату/отметки времени.

Проблема № 1: код работал до преобразования, но после преобразования все отметки даты и времени отображаются в формате научной нотации. Я пробовал модифицировать свой CFQUERY с помощью конвертирования, но все это показывает, что поля даты/времени указаны как «YYYY/MM/DD» вместо моего предполагаемого формата: «MM/DD/YYYY HH: MM AM/PM «. Когда я дважды щелкаю по ячейке в excel, я вижу правильное форматирование, но по умолчанию оно показывает его как «ГГГГ/ММ/ДД». Какие-нибудь предложения здесь?

Проблема № 2: Если столбец или конкретная ячейка, которая должна использовать форматирование даты/времени, я указал, что это пустое или пустое, я получаю сообщение '' - неверная ошибка даты или времени.

Вот что я использую для CAST/CONVERT в моем cfquery:

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

1) I я не саркастичен, но ... если он «отлично работает», что вы пытаетесь изменить? :) 2) Некоторые из функций электронной таблицы являются .. причудливыми.Это поможет, если вы соберете небольшой, * автономный * пример воспроизведения, который демонстрирует проблему, поэтому мы можем протестировать ее самостоятельно. Используйте http://sqlfiddle.com для части sql. 3) Если вы получаете ошибки, укажите * полное сообщение об ошибке. Трудно сказать из этого предложения, если вы получаете ошибку SQL или ошибку CF. – Leigh

+0

«Работая отлично до преобразования», я имею в виду, когда Oracle представлял поля даты в файле электронных таблиц, которые вывод ColdFusion появился правильно. Другими словами, после завершения преобразования Oracle в MSSQL все поля даты отображаются в формате научной нотации. Итак, я добавил «CAST (CONVERT .....» в CFQUERY, и единственное, что он сделал, это изменить форматирование с научной нотации на формат YYYY/MM/DD в файле excel. – bman2013

ответ

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"> 
+0

Какая версия CF10? отлично работал для меня в быстрой проверке с CF10 (не загружался). – Leigh

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: (Cell Тип: General)

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: (Cell Тип: General)

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: (Cell Тип: General)

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 
Смежные вопросы