Условное форматирование файла Excel с помощью ColdFusion

Я создаю электронную таблицу динамически, используя метод cfscript spreadsheetNew.

i.e.

<cfscript>
  downloadDoc = spreadsheetNew("spreadSheetName");
  spreadsheetAddRow(downloadDoc,"spreadsheetCols");
  ....
</cfscript>

Один из столбцов, которые я создаю, содержит формулу, показывающую процентную разницу между значениями, которые пользователь вводит в пустой столбец, и текущим значением (которое находится в другом столбце).

Пользователь, для которого я создаю это, попросил добавить условное форматирование для изменения цвета ячейки формулы на основе значения (т. е. если изменение больше 20% или меньше -20%, ячейка должна быть красной). Поскольку одно из значений, влияющих на формулу, вводится пользователем, изменение цвета должно происходить в Excel, а не в моей функции.

Это просто в Excel, просто не знаю, как встроить это в файл Excel, созданный cfml. введите здесь описание изображения

Мой вопрос: кто-нибудь знает, возможно ли это с помощью cfml (через cfscript или тег cfspreadsheet) и как это сделать?

Я ничего не смог найти в Google, а поиск на cfdocs.org ничего не дал.


person kuhl    schedule 26.01.2016    source источник
comment
Возможно. Я предлагаю идти детскими шажками. Во-первых, если вы еще не знаете, как форматировать ячейки электронной таблицы, научитесь это делать. Как только вы это освоите, условная логика станет проще.   -  person Dan Bracuk    schedule 26.01.2016
comment
Только для одного пользователя я бы вообще пропустил ColdFusion и написал бы для него макрос.   -  person Dan Bracuk    schedule 26.01.2016
comment
Для этого вам, вероятно, потребуется погрузиться в Apache POI. CFML предоставляет только очень ограниченную функциональность этой библиотеки.   -  person Tim Jasko    schedule 26.01.2016
comment
(Редактировать) Да, CF не поддерживает условное форматирование, насколько я знаю. Вам придется использовать альтернативные методы, такие как POI. если изменение больше 20% или меньше -20% Что должно произойти, если значение не равно ни тому, ни другому, например: 10%?   -  person Leigh    schedule 26.01.2016
comment
@Leigh Либо без цвета, либо зеленый   -  person kuhl    schedule 26.01.2016
comment
@DanBracuk Я понимаю, как форматировать ячейки электронной таблицы, используя электронную таблицуFormatCell и тому подобное, проблема заключается в динамическом условном форматировании, которое изменяется при вводе данных пользователем.   -  person kuhl    schedule 26.01.2016
comment
Итак, вы хотите создать электронную таблицу с помощью ColdFusion, которая меняет форматирование на основе значений, которые пользователь вводит при открытии электронной таблицы в Excel?   -  person Scott Stroz    schedule 26.01.2016


Ответы (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)>

Взятые из комбинации

(но обратите внимание, что примеры, приведенные в последнем, на самом деле не работают)

person Tim Jasko    schedule 26.01.2016
comment
Чёрт, опереди меня ;-). Престижность +1 - person Leigh; 26.01.2016
comment
Спасибо Тим! Это именно то, что я искал. - person kuhl; 26.01.2016