2016-01-26 27 views
5

Sto costruendo un foglio di calcolo in modo dinamico utilizzando il metodo spreadscopheetNewscript di cfscript.Formattazione formattata del file Excel mediante ColdFusion

cioè

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

Una delle colonne Sono edificio contiene una formula per mostrare la differenza percentuale tra valori che un chiavi utente in una colonna vuota e il valore corrente (che è in una colonna diversa) .

L'utente che sto costruendo questo per richiesto che aggiungo la formattazione condizionale per cambiare il colore della cella della formula in base al valore (cioè se la variazione è maggiore del 20% o inferiore a -20% la cella deve essere rosso). Poiché uno dei valori che influisce sulla formula è inserito dall'utente, la modifica del colore dovrà avvenire in Excel, non nella mia funzione.

È facile in Excel, ma non siamo sicuri di come creare questo in un file Excel generato da cfml. enter image description here

La mia domanda è, qualcuno sa se questo è possibile utilizzando cfml (sia tramite cfscript o il tag cfspreadsheet) e come farlo?

Non sono riuscito a trovare nulla su Google, e una ricerca di cfdocs.org non ha rivelato nulla.

+2

E ' possibile. Suggerisco di fare piccoli passi. Innanzitutto, se non sai già come formattare le celle del foglio di calcolo, impara a farlo. Una volta che hai il blocco di ciò, la logica condizionale sarà più semplice. –

+1

Per un solo utente, salterò del tutto ColdFusion e scriverò una macro per lui. –

+3

Probabilmente avrete bisogno di immergervi nel POI di Apache per farlo. CFML espone solo funzionalità molto limitate da quella libreria. –

risposta

5

Buone notizie! Può essere fatto (anche se non in CF10, la versione di POI fornita con quella è troppo bassa). Dal momento che sei su CF11, questo ti porterà quasi tutto lì. Questa particolare demo trasforma qualcosa di più di 100 rosso.

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

preso da una combinazione di

(ma si noti che gli esempi riportati in quest'ultimo in realtà non funzionano)

+0

Accidenti, bastonatemi ;-). Complimenti +1 – Leigh

+0

Grazie Tim! Questo è esattamente quello che stavo cercando. – kuhl