使用Python实现excel项目清单自动生成word文档

使用PYTHON实现excel项目清单自动生成word文档

项目简介

最近在公司学了一点Python,想利用编程把部分工作自动化完成,减轻工作压力。正好最近工作是制作投标文件,需要将数量较多的一些项目信息填入固定格式的投标文件word文档内。我就考虑通过Python实现自动读取excel里各项目信息,按照word模板文件自动生成对应项目名称的word文档,并在每个文档的指定位置自动填入excel里对应项目的信息。
软件功能比较简单。概况起来就是:1.依次读取excel表格里的项目名称,编号、人名、等信息;2.根据word模板文件,依次生成以项目名称为文件名的word文档,并在该文档指定位置插入对应项目的编号、人名、图片等信息
ython

软件环境

Pycharm2021 、 Python3.7 (原来安装的是Python3.10,但是最后编译程序的时候报错,换成Python3.7就好了)、pip(版本不限)

代码

直接上代码
需要引入的包,docx、docxtpl、openpyxl
python-docx:可用于创建和编辑Microsoft Word(.docx)文件。官方文档:link
具体使用方法看官方文档就好,挺不错的,必须注意的是,python-docx包是不能处理doc文件的,只能处理docx文件
docxtp:一个很强大的包,其主要通过对docx文档模板加载,从而对其进行修改。官方文档:link
openpyxl: 一个用于读/写Excel 2010 xlsx/xlsm文件的Python库,官方文档:link

// 需要引入的包,docx、docxtpl、openpyxl


from docx import Document
from docx.shared import Inches
from docxtpl import DocxTemplate, InlineImage
from openpyxl import load_workbook
import os

print('********************投标文件自动填充工具V0.1********************')
print('         ********************说明********************')
print('根据模板文件(tb.docx)和投标项目清单文件(投标项目清单.xlsx)自动填充投标文件中的相关信息,批量生成投标文件')
print('将招标文件内的投标模板拷贝到tb.docx文件里,在需要填入招标编号、分标编号、投标人等信息的地方键入形如:{{招标编号}}的文字')
print('如:分标编号:后面填入{{分标编号}},程序就可以自动识别出标签所在位置并予以替换。')
print('操作时只需在(投标项目清单.xlsx)文件里修改相应项目的招标编号、分标编号、投标人、法人、地址等信息后,双击main.exe即可。')
print('程序在本目录下生成投标文件文件夹,投标项目清单内的项目会被读取并依次生成对应名称的投标文档')
print('软件作者:bigblueman   联系方式3386026295@qq.com')

def replace(obj):
    if obj is None:
        obj = ''
        return obj
    # 加载要填入的数据
wb = load_workbook(r".\\投标项目清单.xlsx")  # 需要填入Word的Excel工作簿的地址
ws = wb['采购需求一览表']  # 工作簿中表格的名称
contexts = []
for row in range(2, ws.max_row + 1):
    name = ws["H" + str(row)].value  # 字母代表表格中对应的列,顺序和列名一定要对应上
    fbbh = ws["D" + str(row)].value
    fbmc = ws["E" + str(row)].value
    zbbh = ws["B" + str(row)].value
    tbr = ws["U" + str(row)].value
    fr = ws["V" + str(row)].value
    addr = ws["W" + str(row)].value
    lxr = ws["X" + str(row)].value
    lxfs = ws["Y" + str(row)].value
    rq = ws["Z" + str(row)].value
    xmjl = ws["AA" + str(row)].value

    context = {"招标项目标段名称": name, "分标编号": fbbh, "投标人": tbr, "分标名称": fbmc, "招标编号": zbbh,"法定代表人":fr,"地址":addr,"联系人":lxr,"联系方式":lxfs,"日期":rq,"项目经理":xmjl}  # 变量名称与Word文档中的占位符要一一对应
    contexts.append(context)
contexts

# 创建要保存的文件夹
os.mkdir("./投标文件")
num = 0  # 在文件名称前加入序号,保证生成的文档顺序与Excel中的顺序保持一致,方便查找
for context in contexts:
    #print(context["name"])
    #print(context)

    print ('\r' + " 完成%d个文件" %num ,end='',)
   # a=os.system('clear')
    if context["招标项目标段名称"] == None:
        brek

    #if context["name"] != none:
    num = num + 1
    #tpl = DocxTemplate(r"C:\\Users\\J2662\\PycharmProjects\\根据excel生成word\\tb.docx")  # 需要填入的Word文档的的地址
    tpl = DocxTemplate(r".\\tb.docx")  # 需要填入的Word文档的的地址
    tpl.render(context)

    tpl.save("./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num)

#插入对应法人的身份证照片
    if context["法定代表人"] == 'AAA':
        file = "./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num
        document2 = Document(file)
        images = "sfz.jpg"
    # 在第一个表格的指定的单元格(第一行第一列)插入图片
       #run = document2.tables[0].cell(0, 0).paragraphs[0].add_run()
       #run.add_picture('sfz.jpg')                                     #插入图片
       #run = document2.tables[0].cell(0, 1).paragraphs[0].add_run()
       #run.add_picture(images,width=Inches(2))                        #插入指定宽度的图片

    #run = document2.tables[0].cell(1, 0).paragraphs[0].add_run()
    #run.add_picture('sfz.jpg'width = Inches (1.25))
        document2.save("./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num)

你可以先用pycharm创建一个工程,将代码拷贝进去,再去安装需要的那几个包。安装方法是在file菜单下的settings里,找到Python interpreter,点击右侧列表上方的加号进行添加,在下一个界面里搜索需要的包,点击左下角的 install Package安装。
在这里插入图片描述
在这里插入图片描述

  1. Python下载地址:link,找到下载界面,下载3.7版本的。下载界面上有 Windows embeddable package版本的和 Windows installer版本的,选择 Windows installer下载。Python的安装,环境变量的添加请自行掌握。
  2. Pycharm 下载地址:link,可以下载免费的Community版本,如果有钱也可以用收费的Professional版。

操作说明

新建一个docx文档,将模板文件拷贝进去。我这里是投标文件。需要填写招标编号、分标编号、投标人,法定代表人、地址、联系人等信息,还有在指定位置放置身份证照片、财务状况表等。如果投标项目比较多,手工制作标书需要耗费较长时间。使用程序自动化填写,可以在几分钟之内完成。
我们需要做的是在标书模板内需要插入文字的地方用花括号做标记。插入图片我是通过在需要插入图片的位置放置表格,让程序判断其是文档中的第几个表格来实现的,有没有其他方法我还没有试验。

我们需要在项目文件夹下新建两个文件:

tb.docx

在这里插入图片描述在这里插入图片描述
投标项目清单.xlsx
在这里插入图片描述

然后就可以运行程序了
在这里插入图片描述
生成的文件自动保存在投标文件文件夹内
在这里插入图片描述
打开文件看看,投标文件模板里填充的内容都填充完成了
在这里插入图片描述

功能调试完成后,打包成EXE文件发布需要用到pyinstaller包。在Pycharm
里的Terminal窗口里执行pyinstaller 进行打包发布。具体操作略~~~~~
在这里插入图片描述

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值