2016-01-26 8 views
5

Я строю таблицу с динамическим использованием метода электронной таблицы cfscriptNew.Условное форматирование файла Excel с использованием ColdFusion

т.е.

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

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

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

В Excel это просто, просто не уверен, как это сделать в файл Excel, созданный cfml.

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

Я не смог найти что-либо. В Google это не поиск, и поиск cfdocs.org ничего не изменил.

+2

Это возможное. Я предлагаю взять детские шаги. Во-первых, если вы еще не знаете, как форматировать ячейки электронных таблиц, научитесь это делать. Как только вы это заметите, условная логика будет проще. –

+1

Для одного пользователя я вообще пропустил ColdFusion и написал для него макрос. –

+3

Вам, вероятно, понадобится окунуться в POI Apache, чтобы выполнить это. CFML предоставляет только очень ограниченную функциональность из этой библиотеки. –

ответ

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)> 

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

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

+0

Дарн, избил меня до него ;-). Kudos +1 – Leigh

+0

Спасибо Тим! Это именно то, что я искал. – kuhl

 Смежные вопросы

  • Нет связанных вопросов^_^