Условное форматирование файла Excel с использованием ColdFusion
Я строю электронную таблицу динамически, используя метод cfscript spreadsheetNew.
т.е.
<cfscript>
downloadDoc = spreadsheetNew("spreadSheetName");
spreadsheetAddRow(downloadDoc,"spreadsheetCols");
....
</cfscript>
Один из создаваемых мной столбцов содержит формулу, показывающую разницу в процентах между значениями, которые пользователь вводит в пустой столбец, и текущим значением (которое находится в другом столбце).
Пользователь, которого я создаю, требует, чтобы я добавил условное форматирование, чтобы изменить цвет ячейки формулы на основе значения (т. Е. Если изменение больше 20% или меньше -20%, ячейка должна быть красной). Поскольку одно из значений, влияющих на формулу, вводится пользователем, изменение цвета должно произойти в Excel, а не в моей функции.
В Excel легко, но не уверен, как встроить это в файл Excel, сгенерированный cfml.
Мой вопрос: кто-нибудь знает, возможно ли это с помощью cfml (либо с помощью cfscript, либо с помощью тега cfspreadsheet), и как это сделать?
Я не смог найти что-нибудь, покуривая это, и поиск в cfdocs.org ничего не дал.
1 ответ
Хорошие новости! Это может быть сделано (хотя не в 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)>
Взятые из комбинации
(но учтите, что приведенные в последнем примере примеры не работают)