使用 ColdFusion 条件格式化 Excel 文件
Conditional Formatting Excel File Using ColdFusion
我正在使用 cfscript spreadsheetNew 方法动态构建电子表格。
即
<cfscript>
downloadDoc = spreadsheetNew("spreadSheetName");
spreadsheetAddRow(downloadDoc,"spreadsheetCols");
....
</cfscript>
我正在构建的其中一列包含一个公式,用于显示用户键入空白列的值与当前值(位于不同列中)之间的百分比差异。
我正在为此构建的用户要求我添加条件格式以根据值更改公式单元格的颜色(即,如果更改大于 20% 或小于 -20%,则单元格应变红)。由于影响公式的值之一是由用户键入的,因此颜色更改需要发生在 Excel 中,而不是在我的函数中。
在 Excel 中很容易,只是不确定如何将其构建到由 cfml 生成的 Excel 文件中。
我的问题是,有人知道这是否可以使用 cfml(通过 cfscript 或 cfspreadsheet 标记)以及如何做到这一点?
我用谷歌搜索找不到任何东西,搜索 cfdocs.org 也没有找到任何东西。
好消息!可以做到(虽然不是在 CF10 中;随附的 POI 版本太低)。由于您使用的是 CF11,因此这将帮助您完成大部分工作。这个特定的演示将任何大于 100 的东西变成红色。
<cfset var poiSheet = downloadDoc.getWorkBook().getSheet("Sheet1")>
<cfset poiSheet.setFitToPage(true)>
<cfset comparison = CreateObject("java", "org.apache.poi.ss.usermodel.ComparisonOperator")>
<cfset rule = poiSheet.getSheetConditionalFormatting().createConditionalFormattingRule( comparison.GE, "100.0", javacast("null", ""))>
<cfset patternFmt = rule.createPatternFormatting()>
<cfset color = CreateObject("java", "org.apache.poi.ss.usermodel.IndexedColors")>
<cfset patternFmt.setFillBackgroundColor(javacast("short", color.RED.index))>
<cfset cellRangeAddress = CreateObject("java", "org.apache.poi.ss.util.CellRangeAddress")>
<cfset regions = [ cellRangeAddress.valueOf("A1:A6") ]>
<cfset poiSheet.getSheetConditionalFormatting().addConditionalFormatting(regions, rule)>
取自
的组合
(但注意后面给出的例子并不能真正起作用)
我正在使用 cfscript spreadsheetNew 方法动态构建电子表格。
即
<cfscript>
downloadDoc = spreadsheetNew("spreadSheetName");
spreadsheetAddRow(downloadDoc,"spreadsheetCols");
....
</cfscript>
我正在构建的其中一列包含一个公式,用于显示用户键入空白列的值与当前值(位于不同列中)之间的百分比差异。
我正在为此构建的用户要求我添加条件格式以根据值更改公式单元格的颜色(即,如果更改大于 20% 或小于 -20%,则单元格应变红)。由于影响公式的值之一是由用户键入的,因此颜色更改需要发生在 Excel 中,而不是在我的函数中。
在 Excel 中很容易,只是不确定如何将其构建到由 cfml 生成的 Excel 文件中。
我的问题是,有人知道这是否可以使用 cfml(通过 cfscript 或 cfspreadsheet 标记)以及如何做到这一点?
我用谷歌搜索找不到任何东西,搜索 cfdocs.org 也没有找到任何东西。
好消息!可以做到(虽然不是在 CF10 中;随附的 POI 版本太低)。由于您使用的是 CF11,因此这将帮助您完成大部分工作。这个特定的演示将任何大于 100 的东西变成红色。
<cfset var poiSheet = downloadDoc.getWorkBook().getSheet("Sheet1")>
<cfset poiSheet.setFitToPage(true)>
<cfset comparison = CreateObject("java", "org.apache.poi.ss.usermodel.ComparisonOperator")>
<cfset rule = poiSheet.getSheetConditionalFormatting().createConditionalFormattingRule( comparison.GE, "100.0", javacast("null", ""))>
<cfset patternFmt = rule.createPatternFormatting()>
<cfset color = CreateObject("java", "org.apache.poi.ss.usermodel.IndexedColors")>
<cfset patternFmt.setFillBackgroundColor(javacast("short", color.RED.index))>
<cfset cellRangeAddress = CreateObject("java", "org.apache.poi.ss.util.CellRangeAddress")>
<cfset regions = [ cellRangeAddress.valueOf("A1:A6") ]>
<cfset poiSheet.getSheetConditionalFormatting().addConditionalFormatting(regions, rule)>
取自
的组合(但注意后面给出的例子并不能真正起作用)