使用python将Excel中的数据自动填入Word文档指定位置并独立生成docx文档

背景:博主在银行实习期间进行过一段时间的实习,期间有档案整理的工作,这其中一项就是为每份(不同的姓名、时间和档案编号)档案制作相同的封面,上千份的档案实在繁重,所以想到使用一下程序,此程序的用途可以修改衍生,解决其他重复性劳动。 

环境:Python3.7.6,Pycharm,Win10 64位系统     

材料:

 

from docxtpl import DocxTemplate,InlineImage
from openpyxl import load_workbook
import os


def replace(obj):
    if obj is None:
        obj = ''
        return obj


# 加载要填入的数据
wb = load_workbook(r"E:\Desktop\szl.xlsx")  #需要填入Word的Excel工作簿的地址
ws = wb['ydk']  #工作簿中表格的名称
contexts = []
for row in range(2, ws.max_row + 1):
    name = ws["A" + str(row)].value  #字母代表表格中对应的列,顺序和列名一定要对应上
    year = ws["B" + str(row)].value
    mon = ws["C" + str(row)].value
    day = ws["D" + str(row)].value
    number = ws["E" + str(row)].value


    context = {"name": name, "year": year, "number": number,"mon":mon,"day":day} #变量名称与Word文档中的占位符要一一对应
    contexts.append(context)
contexts
# 创建要保存的文件夹
os.mkdir("./合同封面")
num=0   #在文件名称前加入序号,保证生成的文档顺序与Excel中的顺序保持一致,方便查找
for context in contexts:
    print(context)
    num=num+1
    tpl = DocxTemplate(r"E:\Desktop\Users\fm.docx")  #需要填入的Word文档的的地址
    tpl.render(context)
    tpl.save("./合同封面/%d{}的封面.docx".format(context["name"])%num)





 

注意事项:

1、Excel的文件后缀是.xlsx,Word文档的后缀是.docx

2、确保Excel和Word文档的路径地址正确

3、注意表格名称、列名、占位符与参数的一一对应

4、特别注意:Excel中每一列的数据都必须转换成文本格式,这样Word中呈现的才会和Excel中一模一样(如果有时间格式会精确到秒)

5、占位符的含义:在英文的双层大括号{{}}中添加的占位符,即程序运行后Excel中对应的数据会填入这个位置。

结果:

更新-----程序2.0:档案有很多种类,所以封面种类也不同,但是每种封面上的内容都是姓名、日期、和编号,所以对程序进行了改进,根据不同的label(Excel文档第一列增加label列,说明是那种档案封面)选择对应的封面模板生成封面。

#将Excel表格中的数据自动填入Word指定位置

from docxtpl import DocxTemplate,InlineImage
from openpyxl import load_workbook
import os


def replace(obj):
    if obj is None:
        obj = ''
        return obj


# 加载要填入的数据
wb = load_workbook(r"E:\Desktop\123\test.xlsx")
ws = wb['xindai'] #表格的名称
contexts = []
for row in range(1, ws.max_row + 1): #从第1行开始
    label = ws["A" + str(row)].value
    name = ws["B" + str(row)].value  #字母代表Excel中的列
    year = ws["C"+str(row)].value
    mon = ws["D" + str(row)].value
    day = ws["E" + str(row)].value
    number = ws["F" + str(row)].value


    context = {"label":label,"name": name, "year": year,"mon":mon,"day":day, "number": number}
    contexts.append(context)
contexts
# 创建要保存的文件夹
os.mkdir("./合同封面")
num=0
for context in contexts:
    print(context)
    num=num+1
    if context.get('label') == '不分类':
        tpl = DocxTemplate(r"E:\Desktop\123\bufenlei.docx")
    elif context.get('label') == '基本':
        tpl = DocxTemplate(r"E:\Desktop\123\jiben.docx")
    elif context.get('label') == '贷后':
        tpl = DocxTemplate(r"E:\Desktop\123\daihou.docx")
    elif context.get('label') == '担保':
        tpl = DocxTemplate(r"E:\Desktop\123\danbao.docx")
    elif context.get('label') == '发放':
        tpl = DocxTemplate(r"E:\Desktop\123\fafang.docx")
    tpl.render(context)
    tpl.save("./合同封面/%d{}的{}封面.docx".format(context["name"],context["label"])%num)


 

### 回答1: 将Excel数据对应写入已做好的Word模板的指定位置是一个常见的操作需求。下面是一个简单的方法来实现这个任务。 首先,打开Excel文档并选择要导入的数据范围。确保你选择的数据Word模板的目标位置相对应。然后,将这些数据复制到剪贴板。 接下来,打开Word模板文件,并找到你要将数据粘贴到的指定位置使用鼠标或键盘工具选目标位置。 然后,点击Word的“编辑”菜单,选择“粘贴”。请确保选择“粘贴选项”的“文本”选项,这样可以保持数据的格式不变。粘贴完毕后,你会发现Excel数据已经被粘贴到了Word模板的指定位置。 最后,保存Word文档,并根据需要进行修改和格式化。你可以通过在Word编辑文本、插入图片以及应用样式和格式等方式来美化你的文档。 总结起来,将Excel数据对应写入已做好的Word模板的指定位置分发的方法是:复制Excel数据,粘贴到Word模板的指定位置,保存并格式化Word文档。这个方法简单直接,适用于一次性的数据导入任务。如果需要频繁导入数据,可以考虑使用VBA宏或其他自动化工具实现更高效的批量处理。 ### 回答2: 将Excel数据对应写入已做好的Word模板的指定位置,可以通过以下步骤进行。 首先,打开Excel文件,并选择需要导入到Word模板的数据。确保Excel文件数据Word模板的相应位置一一对应。 然后,打开Word模板并定位到需要插入数据指定位置。可以使用书签或者插入点等方法,将光标定位到正确的位置。 接下来,返回Excel文件,选择要导入的数据。可以使用复制和粘贴功能,将所选数据复制到剪贴板。 回到Word模板,将光标定位到指定位置后,使用粘贴功能将Excel数据粘贴到Word模板。 如果需要对数据进行格式调整,可以使用Word的格式工具进行调整,以保证数据在模板的显示效果符合要求。 最后,保存Word文档,并对其进行分发。可以将文档保存为PDF格式或者直接发送给相关人员。 总结起来,实现将Excel数据对应写入已做好的Word模板的指定位置,需要首先选择并复制Excel数据,然后将光标定位到Word模板的指定位置,并粘贴Excel数据。最后保存Word文档并分发给相关人员。 ### 回答3: 要将Excel数据对应写入已做好的Word模板的指定位置,可以通过使用VBA宏来实现。以下是实现该功能的步骤: 1. 首先,打开Excel文档并选择要写入的数据。可以选择通过VBA宏自动Excel读取数据,或手动选择需要写入的数据。 2. 打开Word文档,并将模板加载到文档。 3. 在Word文档,找到需要插入数据位置,并给这些位置起一个独立的标识名称。 4. 在Excel使用VBA宏来连接Word对象库。可以通过以下代码实现: ```vba Dim wdApp As Word.Application Dim wdDoc As Word.Document Set wdApp = New Word.Application Set wdDoc = wdApp.Documents.Open("路径\Word模板.docx") ``` 5. 接下来,使用以下代码将Excel数据写入到Word模板的指定位置: ```vba wdDoc.Bookmarks("标识名称1").Range.Text = Worksheets("Sheet1").Range("A1").Value wdDoc.Bookmarks("标识名称2").Range.Text = Worksheets("Sheet1").Range("B1").Value ... ``` 这里的"标识名称1"、"标识名称2"等是在步骤3Word模板的插入位置起的标识名称。 6. 完成数据写入后,保存并关闭Word文档。 7. 最后,释放相关对象的内存空间: ```vba wdDoc.Close SaveChanges:=True Set wdDoc = Nothing wdApp.Quit Set wdApp = Nothing ``` 这样就完成了将Excel数据对应写入已做好的Word模板的指定位置。你可以根据实际需求修改VBA代码,以适应不同的数据和模板格式。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值