最近在公司学了一点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")
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}
contexts.append(context)
contexts
os.mkdir("./投标文件")
num = 0
for context in contexts:
print ('\r' + " 完成%d个文件" %num ,end='',)
if context["招标项目标段名称"] == None:
num = num + 1
tpl = DocxTemplate(r".\\tb.docx")
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"
document2.save("./投标文件/%d{}.docx".format(context["招标项目标段名称"]) % num)
你可以先用pycharm创建一个工程,将代码拷贝进去,再去安装需要的那几个包。安装方法是在file菜单下的settings里,找到Python interpreter,点击右侧列表上方的加号进行添加,在下一个界面里搜索需要的包,点击左下角的 install Package安装。
- Python下载地址:link,找到下载界面,下载3.7版本的。下载界面上有 Windows embeddable package版本的和 Windows installer版本的,选择 Windows installer下载。Python的安装,环境变量的添加请自行掌握。
- Pycharm 下载地址:link,可以下载免费的Community版本,如果有钱也可以用收费的Professional版。
新建一个docx文档,将模板文件拷贝进去。我这里是投标文件。需要填写招标编号、分标编号、投标人,法定代表人、地址、联系人等信息,还有在指定位置放置身份证照片、财务状况表等。如果投标项目比较多,手工制作标书需要耗费较长时间。使用程序自动化填写,可以在几分钟之内完成。
我们需要做的是在标书模板内需要插入文字的地方用花括号做标记。插入图片我是通过在需要插入图片的位置放置表格,让程序判断其是文档中的第几个表格来实现的,有没有其他方法我还没有试验。
我们需要在项目文件夹下新建两个文件:
tb.docx
投标项目清单.xlsx
然后就可以运行程序了
生成的文件自动保存在投标文件文件夹内
打开文件看看,投标文件模板里填充的内容都填充完成了
功能调试完成后,打包成EXE文件发布需要用到pyinstaller包。在Pycharm
里的Terminal窗口里执行pyinstaller 进行打包发布。具体操作略~~~~~
最近在公司学了一点Python,想利用编程把部分工作自动化完成,减轻工作压力。正好最近工作是制作投标文件,需要将数量较多的一些项目信息填入固定格式的投标文件word文档内。我就考虑通过Python实现自动读取excel里各项目信息,按照word模板文件自动生成对应项目名称的word文档,并在每个文档的指定位置自动填入excel里对应项目的信息。
企业编制项目投标文件,一般会利用模板编制,但存在多人共同编制等情况,导致最终文档的格式比较杂乱。
资源功能:
利用Python调整Word正文格式、图片居中加边框、表格格式调整等。
资源说明:
1)需调整的Word文件应已成型,页眉页脚及页码、目录通过Word设置,本资源不涉及此类调整;
2)格式修改的内容包括:页边距的设置、(标题格式建议在Word内设置,更方便于目录的调整)、文档内图片格式调整(利用VBA)、文档内表格格式调整(利用VBA)、文档正文格式调整(除封面、目录及标题)。
Python将Excel(xlsx)中的表格插入word文档(docx)
python读取excel表格写进word文档
python读取excel表格写入word文档
python读取excel表格插入word文档
python读取excel表格写进docx文件
python读取excel表格插入docx文件
python读取excel表格插入word文档中
的确,出色的棋手Somurolov先生断言,除了他以外,没有人能如此快地将骑士从一个位置转移到另一个位置。你能打败他吗?问题:
你的任务是编写一个程序来计算一个骑士到达另一个点所需的最小移动次数,这样你就有机会比Somurolov更快。
对于不熟悉国际象棋的人,可能的骑士动作如图1所示。
输入本身以单行上的方案数n开始。
接下来是n种场景。每个场景由三行包含整数组成。第一行指定棋盘一侧的长度l(
有时候需要根据excel中的数据生成多个word文件,比如一行数据生成一个文件,这些文件大部分内容是一样的,只有个别地方不一样,像姓名、成绩等,传统方法是拷贝粘贴,但数据量大的话就太麻烦了,为此编程实现自动化。
基本思想是建立一个word模板文件,输入固定的内容,包括文字、图片、页眉页脚等等。在需要填空的地方插入标签并记住标签名,存为模板文件,拷贝至指定目录,指定目录中同时还有excel数据文件。在同样的指定目录新建Python程序,程序打开excel文件,取数据,针对每一行数据,根据模板新...
path = r'd:\\a.docx' #表格在哪个位置(文件路径)
document = Document(path) #读入表格文件
tables = document.tables #获取文件中所有的表格
print(len(tables)) #获取文件中有几个表格
for table in tables:#遍历每一个表格
for row in table.
Python自动化办公-处理word文档
年底项目投标,需要整理大量的内容,标书的很多内容是其实是之前的标书重复的,可以把对应的各个部分内容合并,然后再处理格式等。如果采用常规操作每次操作需要打开子目录——>找到word文档——>全选复制——>粘贴到新文档——>调整格式——>核对检查,期间出现错误还得用更多的时间,这太浪费时间了!
采用Python的组间对象模型(COM)设计了一个同时对多个word文件进行合并的程序,代码如下:
import win32com.