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

3

我在我的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>

它将该行中的所有列转换为“日期”格式。而我只想让每行中的第一列成为“日期”类型。


你的CF版本是什么?听起来像个bug,也许需要单独应用格式。 - SOS
我们有CF11版本。 - user2675939
我会编写一个独立的重现案例并提交一个 bug https://bugbase.adobe.com。当您尝试单独格式化单元格/列时会发生什么情况 - 作为一种解决方法? - SOS
我最近没有做过这个,而且当我做的时候是用的第9版,但我模糊地记得尝试使用大量数据进行这种操作非常慢。考虑到这一点,你在添加数据之前可能更幸运地格式化你的行。 - Dan Bracuk
1
呀,问题是我需要创建行/添加数据并进行格式化 - 现在似乎有个错误。 - user2675939
1个回答

0

听起来像是个bug。我会整理一个重现案例并提交一个bug bugbase.adobe.com

虽然不是理想的解决方法,但一个可能的变通方法是在格式化行之后设置日期列的值。不幸的是,设置单元格值也会清除背景颜色,所以您需要重新应用它。已在CF11上测试,结果可能有所不同。

NB:这个变通方法不会改变列的顺序,只会改变它们被格式化的时间。所以“日期”仍然会出现在第一列。

在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


这仍然会清除其余列的背景颜色,除了日期列,但还是谢谢! - user2675939
你确定你运行了上面的完全相同的代码吗?在trycf.com上可以正常工作(保留所有列的背景颜色)。 - SOS
是的,基本上区别在于我的日期列是第一列,所以我在顶部格式化了该行,然后是日期列,然后是其余的列。但它保留了日期的前景色,但清除了其余列的前景色。 - user2675939
它不起作用是因为你使用了稍微不同的代码;-) 为了解决这个问题,函数必须按非常特定的顺序调用。(1.创建除日期之外的所有单元格2.格式化行3.创建和格式化日期单元格) 你正在做一些不同的事情。尝试上面的确切示例。注意,“日期”是第一列,其他单元格的fgcolor保持不变? - SOS
...是的,这样做很傻,但这是我目前找到的唯一解决潜在错误的方法。 - SOS
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接