2016-01-26 11 views
5

Buduję arkusz kalkulacyjny dynamicznie za pomocą arkusza kalkulacyjnego cfscriptNowa metoda.Formatowanie warunkowe pliku Excel za pomocą ColdFusion

tj

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

Jedna z kolumn buduję zawiera formułę, aby pokazać różnicę procentową między wartościami że klucze użytkowników do pustej kolumnie oraz aktualna wartość (która jest w innej kolumnie) .

Użytkownik, którego buduję, zażądał dodania formatowania warunkowego w celu zmiany koloru komórki formuły na podstawie wartości (tj. Jeśli zmiana jest większa niż 20% lub mniejsza niż -20%, komórka powinna być czerwony). Ponieważ jedna z wartości wpływających na formułę jest wprowadzana przez użytkownika, zmiana koloru będzie musiała wystąpić w programie Excel, a nie w mojej funkcji.

W programie Excel jest to łatwe, ale nie wiesz, jak to zrobić w pliku Excel generowanym przez cfml. enter image description here

Moje pytanie brzmi, czy ktoś wie, czy jest to możliwe przy użyciu cfml (albo przez cfscript lub tag cfspreadsheet) i jak to zrobić?

Nie udało mi się znaleźć żadnych informacji na ten temat, a wyszukiwanie cfdocs.org niczego nie zmieniło.

+2

To możliwy. Sugeruję podjęcie kroków dla dzieci. Po pierwsze, jeśli nie wiesz już, jak formatować komórki arkusza kalkulacyjnego, naucz się tego. Kiedy już to zrozumiesz, logika warunkowa będzie prostsza. –

+1

Dla jednego użytkownika całkowicie pominę ColdFusion i napiszę dla niego makro. –

+3

Prawdopodobnie będziesz musiał zanurzyć się w Apache POI, aby to osiągnąć. CFML udostępnia tylko bardzo ograniczoną funkcjonalność tej biblioteki. –

Odpowiedz

5

Dobra wiadomość! Można to zrobić (choć nie w CF10, a wersja POI dostarczana z tym jest zbyt niska). Ponieważ jesteś na CF11, to dostaniesz tam najwięcej drogi. W tym konkretnym demo wszystko jest większe niż 100 czerwonych.

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

Zrobione z kombinacji

(należy jednak pamiętać, że przykłady podane w drugim naprawdę nie działa)

+0

Cholernie, pobij mnie do tego ;-). Kudos +1 – Leigh

+0

Dzięki Tim! Właśnie tego szukałem. – kuhl

Powiązane problemy