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.

Python-docx – fusionar TODAS las celdas en una fila o columna de una tabla (o un subconjunto específico de celdas en una columna) con un solo comando.

Estoy usando python-docx para generar programáticamente una tabla muy grande y complicada dentro de un documento de Word.

Sin embargo, como parte del proceso de embellecimiento, necesito fusionar todas las celdas en filas o columnas específicas.

Cuando sé de antemano cuántas celdas hay en una fila o columna, la fusión es trivial, como se muestra en el siguiente código:

from docx import Document
doc = Document()

#añadir una tabla de detalles con 4 columnas
tableOverview = doc.add_table(rows=1, cols=4)
tableOverview.style = ‘Table Grid’

#añadir algo de texto en la primera celda de una fila
row = tableOverview.row_cells(0)
row[0].text = “Detalles del trabajo”

#fusionar las 4 celdas en una fila en una sola
merge1 = row[0].merge(row[1]).merge(row[2]).merge(row[3])

Sin embargo:
– Esto parece muy feo y no parece pythonico especificar una cadena de fusiones.
– Se vuelve complicado si no sé de antemano cuántas celdas hay en una fila (o en una columna). Esto se convierte en un problema ya que estoy generando estas tablas en función de las entradas y, por lo tanto, el número de celdas por fila y columna es dinámico, por lo que no puedo codificar una cadena de fusiones.

Una rápida revisión de la documentación no arrojó buenos ejemplos. Siempre es el caso de que se fusionan sólo dos celdas a la vez. ¿Existe alguna manera razonable de fusionar una lista completa de celdas?

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para fusionar una lista completa de celdas de forma dinámica, puede utilizar el siguiente enfoque:

    • Defina los índices de las celdas que desea fusionar como una lista.
    • Utilice un bucle para fusionarlas una por una.

    Aquí hay un ejemplo que fusiona celdas en una fila basándose en una lista de índices de celdas:

    from docx import Document
    
    doc = Document()
    
    # agregar tabla con 4 columnas
    tableOverview = doc.add_table(rows=1, cols=4)
    tableOverview.style = 'Table Grid'
    
    # agregar texto en la primera celda de una fila
    row = tableOverview.row_cells(0)
    row[0].text = "Detalles del trabajo"
    row_indexes_to_merge = [0,1,2,3]  # índices de las celdas en la fila para fusionar
    
    # fusionar celdas en la fila
    start_cell = row[row_indexes_to_merge[0]]
    for cell_idx in row_indexes_to_merge[1:]:
        end_cell = row[cell_idx]
        start_cell.merge(end_cell)
        start_cell = end_cell
    

    Puede aplicar un enfoque similar para fusionar celdas en una columna. Simplemente cambie row a col y row_indexes_to_merge a col_indexes_to_merge en el código anterior.

    Este enfoque le permite fusionar celdas dinámicamente sin codificar en duro la cadena de fusión, y parece más “pythonico” que especificar una cadena larga de fusiones.

Comments are closed.