Formato condicional de archivo de Excel con ColdFusion
apache-poi coldfusion-11 (1)
Estoy construyendo una hoja de cálculo de forma dinámica con el método cfscript de hoja de cálculo. Nuevo.
es decir
<cfscript>
downloadDoc = spreadsheetNew("spreadSheetName");
spreadsheetAddRow(downloadDoc,"spreadsheetCols");
....
</cfscript>
Una de las columnas que estoy creando contiene una fórmula para mostrar la diferencia porcentual entre los valores que un usuario ingresa en una columna en blanco y el valor actual (que está en una columna diferente).
El usuario para el que estoy compilando solicitó que agregue formato condicional para cambiar el color de la celda de fórmula en función del valor (es decir, si el cambio es superior al 20% o inferior a -20%, la celda debe ser roja). Dado que el usuario ingresa uno de los valores que afecta la fórmula, el cambio de color deberá ocurrir en Excel, no en mi función.
Es fácil en Excel, simplemente no estoy seguro de cómo crear esto en un archivo de Excel generado por cfml.
Mi pregunta es, ¿alguien sabe si esto es posible usando cfml (ya sea a través de cfscript o la etiqueta de cfspreadsheet) y cómo hacer esto?
No pude encontrar nada en Google, y una búsqueda en cfdocs.org no generó nada.
¡Buenas noticias! Se puede hacer (aunque no en CF10, la versión de POI que se envía con eso es demasiado baja). Ya que estás en CF11, esto te llevará la mayor parte del camino hasta allí. Esta demostración en particular convierte cualquier cosa superior a 100 rojo.
<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)>
Tomado de una combinación de
(pero tenga en cuenta que los ejemplos dados en este último en realidad no funcionan)