es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

openpyxl.formatting.rule: regla de formato de openpyxl Excel formula with variable as value: fórmula de Excel con variable como valor

No sé si alguien ya ha utilizado openpyxl.formatting.rule y una fórmula de Excel que contiene una variable como valor.

No puedo encontrar una solución para poner una variable como valor en una fórmula de Excel.
Cuando establezco el valor real, la fórmula se tiene en cuenta correctamente y el resultado es el esperado.
Cuando establezco una variable (como argumento de la función), la fórmula no reconoce el valor que es una cadena y mi archivo de Excel no se actualiza como se espera.

import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.dimensions import ColumnDimension, DimensionHolder
from openpyxl.styles import Color, Fill, Font, PatternFill
from openpyxl.cell import Cell
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.formatting.rule import Rule
...

def add_title_in_sheet(worksheet, title, ref_build, size_value):
    ...

<h1>para las líneas que contienen valores de referencia de construcción</h1>

reference_fill = PatternFill(bgColor="00FFFF")
dxf = DifferentialStyle(fill=reference_fill)
rule2 = Rule(type="expression", dxf=dxf)
<strong>rule2.formula = ['ISNUMBER(SEARCH("2021 R2_B20210527", $C5))']  # Funciona bien</strong>
<strong>rule2.formula = ['ISNUMBER(SEARCH(ref_build, $C5))']            # No puede funcionar</strong> 
worksheet.conditional_formatting.add('A5:G200', rule2)
<code>
En el programa principal de Python:
</code>
wb = writer.book
add_title_in_sheet(wb['Measures'], "Lista de medidas", "2021 R2_B20210527", 14 )

Nota: He probado muchas formas de escritura pero ninguna ha funcionado.

rule2.formula = ['ISNUMBER(SEARCH(ref_build, $C5))']
o
rule2.formula = ['ISNUMBER(SEARCH("ref_build", $C5))']
o
rule2.formula = ['ISNUMBER(SEARCH({ref_build}, $C5))']
o
rule2.formula = ['ISNUMBER(SEARCH(\'ref_build\', $C5))']
o
rule2.formula = ['ISNUMBER(SEARCH("{ref_build}", $C5))']

¿Quién tiene una solución?

¿Por qué no pongo directamente el valor? Porque se recupera en una celda de Excel antes.
Nota: esta función se utiliza en un programa de Python que utiliza panda, dataframe, read_excel con el motor openpyxl.

Gracias por tu ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando utilizar una variable como valor para una fórmula de Excel utilizando openpyxl. Según el código que proporcionaste, parece que has intentado múltiples formas de hacerlo pero no has tenido éxito.

    Una posible solución que podrías intentar es usar el formato de cadena para reemplazar la variable con su valor en la cadena de la fórmula. Por ejemplo:

    rule2.formula = [f'ISNUMBER(SEARCH("{ref_build}", $C5))']

    Esto reemplazará la parte {ref_build} de la cadena con el valor real de ref_build.

    Alternativamente, podrías intentar convertir la variable a una cadena antes de usarla en la cadena de la fórmula:

    rule2.formula = [f'ISNUMBER(SEARCH({str(ref_build)}, $C5))']

    Esto asegurará que la variable se esté utilizando como una cadena en la fórmula.

    ¡Espero que esto te ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.