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.

Cómo comprobar si excel tiene un enlace externo en cualquier hoja, utilizando Python.

Tengo alrededor de 500 hojas de Excel para comprobar si tienen algún vínculo externo.
Por vínculo externo me refiero a los que se pueden comprobar mediante la pestaña de búsqueda de Excel → “Vínculos” y que aparecen en la lista de Editar vínculos.

Actualmente estoy tratando de usar Python para reemplazar esos vínculos por ” ” para no tener que habilitar el contenido cada vez que abro cualquiera de mis 500 archivos de Excel, pero tengo dificultades para detectar qué archivo tiene vínculos externos y cuál no.

¿Podría darme alguna idea?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución para detectar enlaces externos en 500 hojas de cálculo de Excel usando Python y Openpyxl es iterar por cada hoja de cada archivo de Excel y comprobar si la hoja tiene enlaces externos. Esto se puede hacer usando el módulo openpyxl en Python.

    Aquí hay un código de muestra para comenzar:

    import openpyxl
    
    # Iterar por cada archivo de Excel
    for filename in list_of_filenames:
        # Cargar el archivo de Excel con openpyxl
        wb = openpyxl.load_workbook(filename)
    
        # Iterar por cada hoja en el archivo de Excel
        for sheet in wb.sheetnames:
            # Obtener el objeto de hoja
            sheet_obj = wb[sheet]
    
            # Comprobar si la hoja tiene enlaces externos usando la opción `data_only` de openpyxl
            if sheet_obj.formulae != sheet_obj.formulae.data_only:
                # Si la hoja tiene enlaces externos, realizar la acción deseada (por ejemplo, reemplazar el enlace)
                # ...
    

    La opción data_only en openpyxl asegura que las fórmulas en la hoja se evalúen como los valores resultantes y no como fórmulas. Esto nos permite detectar fácilmente si una hoja tiene enlaces externos, ya que el atributo formulae del objeto de la hoja ya no contendrá ningún enlace externo si la hoja se ha evaluado con data_only.

    Una vez que haya detectado qué hojas tienen enlaces externos, puede usar Python para reemplazar los enlaces con un valor deseado (por ejemplo, “”). Una forma de hacerlo es usar la clase Value de openpyxl para establecer el valor de la celda en una cadena vacía.

    from openpyxl.utils import get_column_letter
    from openpyxl.utils.cell import coordinate_from_string
    
    # Iterar por cada celda en la hoja
    for row in sheet_obj.iter_rows():
        for cell in row:
            # Comprobar si la celda contiene un enlace externo usando la opción `data_only` de openpyxl
            if cell.data_type == 'f' and cell.value != cell.value.data_only:
                # Si la celda contiene un enlace externo, reemplazar el enlace con una cadena vacía
                column, row = coordinate_from_string(cell.coordinate)
                sheet_obj[column + str(row)] = openpyxl.utils.cell.Cell(None, '', 's')
    

    Este código verifica cada celda en la hoja y reemplaza cualquier celda con un enlace externo con una cadena vacía.

    Tenga en cuenta que la implementación exacta puede variar según la estructura de sus archivos de Excel y los requisitos específicos de su caso de uso.

Comments are closed.