使用ColdFusion对Excel文件进行条件格式设置

5
我正在使用cfscript的spreadsheetNew方法动态构建电子表格。
例如:
<cfscript>
  downloadDoc = spreadsheetNew("spreadSheetName");
  spreadsheetAddRow(downloadDoc,"spreadsheetCols");
  ....
</cfscript>

我正在构建的其中一列包含一个公式,用于显示用户键入到空白列中的值与当前值(位于不同列中)之间的百分比差异。我为此用户构建时,他要求我添加条件格式以根据值更改公式单元格的颜色(即如果变化大于20%或小于-20%,则单元格应为红色)。由于影响公式的值之一是由用户输入的,因此颜色更改将需要在Excel中进行,而不是在我的函数中进行。
在Excel中很容易,但不确定如何将其构建到由cfml生成的Excel文件中。 enter image description here 我的问题是,是否有人知道是否可以使用cfml(通过cfscript或cfspreadsheet标记)实现这一点以及如何实现?
我在谷歌上没有找到任何信息,并且在cfdocs.org上的搜索也没有找到任何内容。

2
可以的。我建议采取小步骤。首先,如果您还不知道如何格式化电子表格单元格,请学会如何操作。一旦掌握了这个技能,条件逻辑就会更简单。 - Dan Bracuk
1
对于只有一个用户,我会完全跳过ColdFusion并为他编写一个宏。 - Dan Bracuk
3
你可能需要使用 Apache POI 来完成这个任务。CFML 只能暴露该库的非常有限的功能。 - Tim Jasko
1
是的,据我所知,CF不支持条件格式设置。您将不得不使用替代方法,例如POI。如果更改大于20%或小于-20%,则会发生什么?如果值既不是这样,例如:10%呢? - Leigh
@Leigh 要么没有颜色,要么是绿色。 - kuhl
显示剩余2条评论
1个回答

5

好消息!这是可以实现的(虽然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)>

从以下两个资源中获取信息: (但请注意,后者提供的示例并不实际有效)

真糟糕,你比我先完成了它;-)。赞一个 +1。 - Leigh
谢谢Tim!这正是我在寻找的。 - kuhl

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