Функции электронных таблиц преобразуют даты в текст - PullRequest
0 голосов
/ 14 мая 2018

Я использую функции электронных таблиц для моих отчетов Excel, но при экспорте в Excel он преобразует даты в текст.Итак, я использовал тип данных «Дата» в SpreadSheetSetCellValue , поэтому значения в первом столбце можно преобразовать в любой формат даты, который пожелает клиент.Вот код:

 <cfset SpreadsheetSetCellValue(objSheet, '#RecordDate#', iRow, 1, 'Date')>

Это прекрасно работает, но когда я позже применю цвет фона к чередующимся строкам:

<cfset stFormat.AlternateRow = StructNew()>
<cfset stFormat.AlternateRow.fgcolor = 'yellow'>

<cfif (iRow mod 2) IS 0>
    <cfset SpreadsheetFormatRow(objSheet, stFormat.AlternateRow, iRow)>
</cfif>

Преобразует все изстолбцы в этой строке в формате «дата».Принимая во внимание, что я хочу, чтобы только 1-й столбец в каждой строке имел тип даты date.

1 Ответ

0 голосов
/ 15 мая 2018

Звучит как ошибка для меня. Я собрал бы репро-кейс и отправил сообщение об ошибке bugbase.adobe.com .

Хотя это и не идеально, один из возможных обходных путей - установить значение столбца даты после форматирования строки. К сожалению, установка значения ячейки также стирает цвет фона, так что вам также необходимо повторно применить его. Протестировано с CF11, YMMV.

Примечание: временное решение вообще не меняет порядок столбцов, только , когда они отформатированы . Таким образом, «дата» все еще заканчивается в 1-м столбце.

Пример запуска на TryCF.com

<cfscript>
    objSheet = SpreadSheetNew("Sheet1", true);
    for(iRow = 1; iRow <= 100; iRow++) {

        // populate everything EXCEPT the date column
        SpreadsheetSetCellValue(objSheet, "B", iRow, 2);
        SpreadsheetSetCellValue(objSheet, "C", iRow, 3);
        SpreadsheetSetCellValue(objSheet, "D", iRow, 4);
        SpreadsheetSetCellValue(objSheet, "1234", iRow, 5);

        isAlternateRow = (iRow MOD 2) EQ 0;
        rowColor = isAlternateRow ? 'yellow' : 'white';

        // format whole row 
        if (isAlternateRow) {
            SpreadsheetFormatRow(objSheet, { fgcolor = rowColor }, iRow);
        }

        // finally apply date and reformat that cell
        SpreadsheetSetCellValue(objSheet, now(), iRow, 1, 'date');
        SpreadSheetFormatCell(objSheet, { dataformat = 'mm-dd-yyyy', fgcolor = rowColor}, iRow, 1);
    }
</cfscript>

Результаты:

Results

...