Условное форматирование файла 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)>

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

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

Другие вопросы по тегам