Propagamos documentos
.
En una
publicación anterior, vimos cómo llenar una consulta en Word usando Python. Esta vez se demostrará cómo completar varios documentos de Word a la vez con datos de la tabla de Excel.
Antes de trabajar con el programa, necesitamos preparar un archivo de Excel, que contendrá los datos de origen. Creemos un archivo de Excel con dichos datos o usemos uno listo:

Ahora pasemos al programa.
Como debemos leer el archivo de Excel, debemos importar el módulo correspondiente:
import openpyxl
A continuación, debemos revisar la tabla y leer todos los datos línea por línea. Se verá así:
test=[] wb = openpyxl.load_workbook('zaprosi.xlsx') sheet=wb.get_active_sheet() for row in sheet['B3':'F7']: for cellObj in row: if cellObj.value==None or cellObj.value==" ": continue
Creamos una lista vacía, donde agregamos los valores de la tabla en el futuro. La adición ocurre solo si hay entradas en la celda (no anuladas).
Después de las manipulaciones realizadas, agregaremos los datos recopilados a la plantilla de Word:
doc = DocxTemplate(".docx") context = { 'emitent' : test[0],'address1' : test[1],'' : test[2],'_' : test[3],'director' : test[4] } doc.render(context) doc.save('-final.docx')
Como resultado, tendremos un archivo de palabras terminado con datos de la tabla. Solo que aquí está solo, y se llama plantilla final. ¿Cómo distinguir los documentos entre sí?
Comencemos con uno simple. Para guardar archivos con diferentes nombres cada vez, debe cambiar lo siguiente al final del código:
doc.save(test[x]+'.docx')
Ahora el archivo guardado tendrá el nombre de la empresa que envía la solicitud.
Se puede producir un error durante la ejecución del programa:

Este error se debe al hecho de que el nombre de la empresa contiene comillas. Si elimina las comillas de la tabla de Excel, el archivo de Word se guardará correctamente con el nombre Company-1.docx.
Queda por "duplicar" el documento ingresando los datos restantes de la tabla.
Todo aquí también es simple. Creamos un ciclo de acuerdo con nuestros datos recopilados:
x=0 while x<len(test): doc = DocxTemplate(".docx") context = { 'emitent' : test[x],'address1' : test[x+1],'' : test[x+2],'_' : test[x+3],'director' : test[x+4] } doc.render(context) doc.save(test[x]+'.docx') x+=5
Al final del ciclo, "salte" al nombre de la columna con el nombre de la compañía para que el archivo de palabras se guarde con el nombre correcto.
El programa esta listo! Solo queda crear una tabla de Excel con las empresas que están en servicio.
Descargue el programa terminado
aquí .
Descargue la tabla de Excel con datos de prueba,
aquí .
La plantilla de documento de Word está
aquí .
--- Actualización --- 08/11/2019
.
Añadido :
- la plantilla de palabras de la respuesta del beneficiario;
- la plantilla de solicitud de palabra se ha ampliado por el número de campos (posición del director);
- ahora en la tabla puede completar los nombres de las empresas con cotizaciones,
el programa va a digerir;
- al guardar los archivos de salida de las solicitudes, el programa guarda "bellamente": el director de la empresa, que agrega claridad al trabajar con una gran cantidad de archivos;
- al guardar los archivos de respuesta de salida, el programa guarda: el participante-director a quien respondieron (ya que generalmente el participante puede responder a varias compañías a la vez y los nombres de los archivos se duplican).
Descargue el programa de solicitud de beneficiarios -
aquíDescargue el programa de respuestas -
aquíDescargue la hoja de cálculo de Excel con datos de prueba -
aquíPlantilla de word de solicitud de beneficiario -
aquíPlantilla de respuesta de Word -
aquí