Preencha documentos no Microsoft Word usando Python. Parte 2

Propagamos documentos

.
Em uma postagem anterior, vimos como preencher uma consulta no word usando python. Desta vez, será demonstrado como preencher vários documentos do Word de uma vez com os dados da tabela do Excel.

Antes de trabalhar com o programa, precisamos preparar um arquivo do Excel, que conterá os dados de origem. Vamos criar um arquivo excel com esses dados ou usar um arquivo pronto:

imagem

Agora vamos ao programa.

Como precisamos ler o arquivo do Excel, precisamos importar o módulo correspondente:

import openpyxl 

Em seguida, precisamos percorrer a tabela e ler todos os dados linha por linha. Ficará assim:

 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 #print(cellObj.value) test.append(cellObj.value) 

Criamos uma lista vazia, onde adicionamos os valores da tabela no futuro. A adição ocorre apenas se houver alguma entrada na célula (não é nula).

Após as manipulações feitas, adicionaremos os dados coletados ao modelo da palavra:

 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, teremos um arquivo word finalizado com os dados da tabela. Somente aqui está sozinho, e o template-final é chamado. Como então distinguir documentos um do outro?

Vamos começar com um simples. Para salvar arquivos com nomes diferentes a cada vez, é necessário alterar o seguinte no final do código:

 doc.save(test[x]+'.docx') 

Agora, o arquivo salvo terá o nome da empresa que está enviando a solicitação.

Pode ocorrer um erro durante a execução do programa:

imagem

Este erro ocorre devido ao fato de o nome da empresa conter aspas. Se você remover aspas da tabela do Excel, o arquivo de palavras será salvo com sucesso com o nome Company-1.docx.

Resta "duplicar" o documento inserindo os dados restantes da tabela.

Tudo aqui também é simples. Criamos um ciclo de acordo com nossos dados coletados:

 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 

No final do ciclo, “pule” para o nome da coluna com o nome da empresa, para que o arquivo da palavra seja salvo com o nome correto.

O programa está pronto! Resta apenas criar uma tabela do Excel com empresas que estão em serviço.

Faça o download do programa finalizado aqui .

Faça o download da tabela do Excel com dados de teste - aqui .

O modelo de documento do word está aqui .

--- Atualização --- 08/11/2019

.
Adicionado :
- o modelo da palavra da resposta pelo beneficiário;
- o modelo de solicitação de palavras foi ampliado pelo número de campos (posição do diretor);
- agora, na tabela, você pode preencher os nomes das empresas com aspas,
o programa será digerido;
- ao salvar os arquivos de saída das solicitações, o programa salva “lindamente”: o diretor da empresa, que adiciona clareza ao trabalhar com um grande número de arquivos;
- ao salvar os arquivos de resposta de saída, o programa salva: o participante-diretor-que respondeu (já que geralmente o participante pode responder a várias empresas ao mesmo tempo e os nomes dos arquivos são duplicados).

Faça o download do programa de solicitação de beneficiário - aqui
Faça o download do programa de respostas - aqui
Faça o download da planilha do Excel com dados de teste - aqui
Modelo do word - solicitação do beneficiário - aqui
Modelo de resposta do Word - aqui

Source: https://habr.com/ru/post/pt459152/


All Articles