2016-01-26 5 views
5

Ich erstelle eine Tabelle dynamisch mit der Methode cfscript talkleeNew.Bedingte Formatierung von Excel-Dateien mit ColdFusion

dh

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

Eine der Spalten Ich bin Gebäude enthält eine Formel, um die prozentuale Differenz zwischen den Werten zu zeigen, dass ein Benutzerschlüssel in eine leere Spalte und der aktuelle Wert (der in einer anderen Spalte ist) .

Der Benutzer, ich baue dies für angefordert, dass ich bedingte Formatierung hinzufügen, um die Farbe der Formelzelle basierend auf dem Wert zu ändern (dh wenn die Änderung größer als 20% oder weniger als -20% ist, sollte die Zelle sein rot). Da einer der Werte, die die Formel beeinflussen, vom Benutzer eingegeben wird, muss die Farbänderung in Excel und nicht in meiner Funktion erfolgen.

Es ist einfach in Excel, nur nicht sicher, wie Sie dies in eine Excel-Datei, die von cfml generiert wird, erstellen.

Meine Frage ist, weiß jemand, ob dies mit cfml möglich ist (entweder über cfscript oder das cfspreadsheet-Tag) und wie geht das?

Ich konnte nichts finden Googeln, und eine Suche von cfdocs.org hat nichts ausgemacht.

+2

Es ist möglich. Ich schlage vor, kleine Schritte zu machen. Wenn Sie nicht bereits wissen, wie Sie Tabellenkalkulationszellen formatieren, lernen Sie, dies zu tun. Sobald Sie den Überblick haben, wird die bedingte Logik einfacher. –

+1

Für nur einen Benutzer würde ich ColdFusion komplett überspringen und ein Makro für ihn schreiben. –

+3

Sie müssen wahrscheinlich in Apache POI tauchen, um dies zu erreichen. CFML stellt nur sehr eingeschränkte Funktionalität von dieser Bibliothek zur Verfügung. –

Antwort

5

Gute Nachrichten! Es kann gemacht werden (obwohl nicht in CF10; die Version von POI, die damit geliefert wird, ist zu niedrig). Da du auf CF11 bist, wird dir das den größten Teil des Weges bescheren. Diese bestimmte Demo dreht alles größer als 100 rot.

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

aus einer Kombination von

Taken (aber beachten Sie, dass die in der zweiten gegebenen Beispiele funktionieren nicht wirklich)

+0

Darn, schlag mich dazu ;-). Kudos +1 – Leigh

+0

Danke Tim! Genau das habe ich gesucht. – kuhl