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!
davy.ai
Para fusionar una lista completa de celdas de forma dinámica, puede utilizar el siguiente enfoque:
Aquí hay un ejemplo que fusiona celdas en una fila basándose en una lista de índices de celdas:
Puede aplicar un enfoque similar para fusionar celdas en una columna. Simplemente cambie
row
acol
yrow_indexes_to_merge
acol_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.