关于python:python-将excel文件单元格内容插入到word模版中并保存为新文件

5次阅读

共计 2025 个字符,预计需要花费 6 分钟才能阅读完成。

前言

前段时间因为须要解决一大堆验收单,都是一些简略的复制粘贴替换工作,于是就想到用 python 进行解决。接下来进入正题~

实现需求

我是用的开发环境是
python 3.6
openpyxl 3.1.1
docx 0.2.4

需要

这个是从公司平台导出的订单详情 excel 文件

这个是公司验收单模版
我这边需要是把 Excel 文件中的订单号、下单公司、套餐、数量别离增加到模版的订单编号、甲方、验收测试内容中,简略来说就是通过 python 脚本,将 excel 文件的订单号、下单公司、套餐、数量别离替换 word 文件中的 OrderID、Company、Package、Quantity

实现代码

明确需要后间接上代码

import openpyxl
import docx
import datetime
def get_excel_data():
    # 关上 Excel 文件
    wb = openpyxl.load_workbook('下单明细.xlsx')
    ws = wb['Sheet1']
    # 获取序列号
    for cell in ws['A']:
        Number.append(cell.value)
    # 获取订单号
    for cell in ws['C']:
        OrderID.append(cell.value)
    # OrderID.pop(0)
    # 获取数量
    for cell in ws['F']:
        Quantity.append(cell.value)
    # 获取公司名称
    for cell in ws['B']:
        Company.append(cell.value)
    # 获取订单套餐
    for cell in ws['D']:
        Package.append(cell.value)
    # 替换 word 文档内容
    for i in range(len(Number)):
        # 关上 word 文档
        new_doc = docx.Document('交付验收单.docx')
        for p in new_doc.paragraphs:
            for r in p.runs:
                # print(r.text)
                if 'OrderID' in r.text: # 替换订单号
                    item = OrderID[i]
                    r.font.underline = True
                    r.text = r.text.replace('OrderID', item)
                    print('OrderID' + '更改为' + str(item))
                if 'Quantity' in r.text: # 替换数量
                    item = Quantity[i]
                    r.font.underline = True
                    r.text = r.text.replace('Quantity', str(item))
                    print('Quantity' + '更改为' + str(item))
                if 'Company' in r.text: # 替换公司名称
                    item = Company[i]
                    r.font.underline = True
                    r.text = r.text.replace('Company', str(item))
                    print('Company' + '更改为' + str(item))
                if 'Package' in r.text:  # 替换订单套餐
                    item = Package[i]
                    r.font.underline = True
                    r.text = r.text.replace('Package', str(item))
                    print('Package' + '更改为' + str(item))
                    # 替换日期    #这里因为能够间接改模版所有正文掉了,须要可开启
                # if 'Yy' in p.text:
                #     p.text = p.text.replace('Yy', str(year))
                # if 'Mm' in p.text:
                #     p.text = p.text.replace('Mm', str(month))
                # if 'Dd' in p.text:
                #     p.text = p.text.replace('Dd', str(day))
        # 保留新文档    #文件命名格局:交付验收单 - 公司名称工夫序号.docx
        new_doc.save('交付验收单 -'+ str(Company[i]) +str(year)+str(month)+str(day)+'-' + str(Number[i]) + '.docx')
if __name__ == "__main__":
    Number = []
    OrderID = []
    Quantity = []
    Company = []
    Package = []
    now = datetime.datetime.now()
    year = now.strftime("%Y")
    month = now.strftime("%m")
    day = now.strftime("%d")
    get_excel_data()

运行成果

终端:
文件夹保留文件:

留神:这里我为了不便以及更直观的看到成果,把 Excel 文件表头栏也进行替换了,后续如果须要能够应用
OrderID.pop(0)
将表头栏参数删掉,再把 for 循环次数减一即可
for i in range(len(Number) - 1):
替换后的 word 文件:

结尾

以上就是整个需要的实现过程啦,心愿能帮忙到大家
明天就这样啦~拜拜👋

正文完
 0