使用Python在Microsoft Word中填写文档。 第二部分

我们传播文件


在上一篇文章中 ,我们研究了如何使用python填充单词查询。 这次将演示如何使用excel表中的数据一次填写多个word文档。

在使用该程序之前,我们需要准备一个excel文件,其中将包含源数据。 让我们使用此类数据创建一个excel文件,或使用现成的文件:

图片

现在转到程序。

由于必须读取excel文件,因此需要导入相应的模块:

import openpyxl 

接下来,我们需要遍历表并逐行读取所有数据。 它看起来像这样:

 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) 

我们创建了一个空列表,以后会在其中添加表中的值。 仅当单元格中有任何条目时才添加(不为空)。

完成操作后,我们将收集的数据添加到单词模板中:

 doc = DocxTemplate(".docx") context = { 'emitent' : test[0],'address1' : test[1],'' : test[2],'_' : test[3],'director' : test[4] } doc.render(context) doc.save('-final.docx') 

结果,我们将获得一个完整的word文件,其中包含表中的数据。 仅在这里是单独的,然后调用模板最终处理。 那么如何区分文件呢?

让我们从一个简单的开始。 要每次使用不同的名称保存文件,您需要在代码末尾更改以下内容:

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

现在,保存的文件将具有发送请求的公司的名称。

程序执行期间可能发生错误:

图片

该错误是由于公司名称包含引号引起的。 如果您从excel表中删除引号,则单词文件将成功保存,名称为Company-1.docx。

通过输入表中的剩余数据,仍然可以“复制”文档。

这里的一切也很简单。 我们根据收集的数据创建一个循环:

 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 

在循环结束时,将“跳转”到带有公司名称的列名称,以便使用正确的名称保存单词文件。

程序准备好了! 剩下的只是与服务中的公司一起创建一个excel表。

此处下载完成的程序。

此处下载带有测试数据的excel表。

Word文档模板在这里

-更新--11/08/2019


新增
-受益人答复的字样;
-单词请求模板已经扩展了字段数(导演的位置);
-现在,您可以在表格中用引号填写公司名称,
该程序将摘要;
-当保存输出请求文件时,该程序会“精美地”保存:该公司是公司的董事,在处理大量文件时更加清晰;
-在保存输出响应文件时,程序将保存:回答他们的参与者-主任(因为通常参与者可以一次回答多个公司,并且文件名重复)。

这里下载收款人要求程序
此处下载答案程序
在此处下载带有测试数据的Excel电子表格- 在此处
收款人要求Word模板- 这里
单词答案模板- 这里

Source: https://habr.com/ru/post/zh-CN459152/


All Articles