Ошибка электронной таблицы ColdFusion, неверная строка даты или времени

Я пытаюсь экспортировать запрос в документ Excel.

Вот код, который я использую:

<cfscript> 
    //Use an absolute path for the files. ---> 
    theDir=GetDirectoryFromPath(GetCurrentTemplatePath()); 
    theFile=theDir & "invoicesDue.xls"; 
    //Create an empty ColdFusion spreadsheet object. ---> 
    theSheet = SpreadsheetNew("invoicesData"); 
    //Populate the object with a query. ---> 
    SpreadsheetAddRows(theSheet,invoicesDue);  
</cfscript>

<!--- Write the sheet to a file ---> 
<cfspreadsheet action="write" filename="#theFile#" name="theSheet" sheetname="invoicesDue" overwrite=true>

Ошибка, которую я получаю:

'' is an invalid date or time string. 

121: SpreadsheetAddRows(theSheet,invoicesDue); 

Дело в том, что я выгрузил свой запрос, и нигде не видно кавычек, а все ячейки даты/времени заполнены датой и временем, например «2011-03-31 00:00:00.0», или пустым нить.

Мне было интересно, сталкивался ли кто-нибудь с этой ошибкой раньше, поскольку я не вижу ее причины.


person Alias    schedule 17.01.2013    source источник
comment
Я считаю, что сообщение об ошибке показывает вам значение, определенное как недопустимое. В этом случае '' или пустая строка. Это не предполагает, что в значении есть кавычки. Таким образом, очевидно, что функция SpreadsheetAddRows не любит пустые значения для полей даты при создании электронной таблицы. Во всяком случае, это мое предположение. Можно ли удалить строки с пустыми полями даты из вашего запроса или они вам все еще нужны в электронной таблице? В этом случае вам, вероятно, понадобится какой-то способ установить значение даты по умолчанию для этих пустых дат.   -  person Miguel-F    schedule 17.01.2013
comment
Почему бы просто не направить запрос прямо в cfspreadsheet вместо того, чтобы передавать ему объект электронной таблицы? Должен сделать всю работу за вас тогда. ‹cfspreadsheet action=write filename=#theFile# query=invoicesDue имя_листа=invoicesDue overwrite=true›   -  person Busches    schedule 17.01.2013
comment
Подача запроса сама по себе тоже не помогла. Провел некоторое тестирование, и @Miguel-F был прав, cfspreadsheet не любит пустые значения для полей даты. В конце концов я использовал CAST(emptyDate as varchar), что кажется исправлением. Спасибо.   -  person Alias    schedule 17.01.2013
comment
@Alias, вы можете добавить свое решение в качестве ответа, чтобы оно было более заметным для других с той же проблемой.   -  person Dan Bracuk    schedule 17.01.2013


Ответы (2)


cfspreadsheet не любит пустые значения для полей даты. В итоге я использовал:

CAST(emptyDate as varchar) 

Что кажется исправлением.

person Alias    schedule 17.01.2013

В качестве альтернативы я использую queryToCSV() и обойти "причудливость" cfspreadsheet. Когда все, что мне нужно, это одностраничный файл csv/xls, он работает как шарм.

person Gavin Baumanis    schedule 17.01.2013
comment
Привет Дэн, я почти уверен, что разделитель является аргументом для этой функции. - person Gavin Baumanis; 22.01.2013