电子表格函数将日期转换为文本

时间:2018-05-14 17:03:17

标签: excel coldfusion spreadsheet coldfusion-11

我正在为Excel报表使用电子表格函数,但在导出到Excel时会将日期转换为文本。所以,我在SpreadSheetSetCellValue中使用了数据类型'Date',因此第一列中的值可以转换为客户想要的任何日期格式。这是代码:

 <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 :(得分:0)

对我来说听起来像个错误。我将一个repro案例放在一起并提交了一个错误bugbase.adobe.com

虽然不理想,但一种可能的解决方法是在格式化行之后设置日期列值。不幸的是,设置单元格值也会消除背景颜色,因此您还需要重新应用它。用CF11,YMMV测试。

注意:解决方法根本不会更改列的顺序,只有才会更改。所以&#34; date&#34;仍然在第1栏中结束。

Runnable Example on 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