电子表格函数将日期转换为文本
Spreadsheet Functions converts dates into text
我正在为我的 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>
它将该行中的 所有 列转换为 'date' 格式。而我只希望每一行的第一列为 'date' 日期类型。
对我来说听起来像是个错误。我会整理一个重现案例并提交一个错误 bugbase.adobe.com。
虽然不理想,但一种可能的解决方法是设置日期列值 在 格式化该行之后。不幸的是,设置单元格值也会消除背景颜色,因此您也需要重新应用它。使用 CF11、YMMV 测试。
注意:解决方法根本不会更改列的顺序,只有 在它们被格式化时 。所以 "date" 仍然在第一列结束。
<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>
结果:
我正在为我的 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>
它将该行中的 所有 列转换为 'date' 格式。而我只希望每一行的第一列为 'date' 日期类型。
对我来说听起来像是个错误。我会整理一个重现案例并提交一个错误 bugbase.adobe.com。
虽然不理想,但一种可能的解决方法是设置日期列值 在 格式化该行之后。不幸的是,设置单元格值也会消除背景颜色,因此您也需要重新应用它。使用 CF11、YMMV 测试。
注意:解决方法根本不会更改列的顺序,只有 在它们被格式化时 。所以 "date" 仍然在第一列结束。
<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>
结果: