简 介:
此程序是解决在日常办公中,需要生成各种所需文档。通过python和一个固定的模板(本次需求是这样,也可以不固定),达到批量读取excel表格,然后填写到固定word模板中再转换成pdf格式。
关键词: python,自动化办公,docxtpl, tikinter, gui,桌面程序
程序界面:
程序功能说明:日期是默认当前时间的,也可以手动更改日期。当导入两个excel表格后,点击开始就会按照一定规则先将两个表格中的数据提取,存到word固定的格式内,再转换成pdf格式。以此达到批量生成pdf文档,自动化办公减轻负担。
root = tk.Tk()
root.geometry("500x300")
c_row = 20
start=datetime.date.today().strftime("%Y年%m月%d日")
def w1():
global file_path1
file_path1 = filedialog.askopenfilename()
text.insert(tk.INSERT, '第一个表格导入成功\n')
text.update()
def w2():
global file_path2
file_path2 = filedialog.askopenfilename()
text.insert(tk.INSERT, '第二个表格导入成功\n')
text.update()
#定义一个文本方法
def e_label(text: str, default: str, readonly=False):
global c_row
tk.Label(root, text=text).grid(row=c_row, sticky=E)
value = tk.StringVar(value=default)
ent = tk.Entry(root, textvariable=value, width=20)
ent.grid(row=c_row, column=1)
if readonly:
ent['state'] = 'readonly'
c_row += 1
return value
start = e_label("开始日期:", start)
word模板样式
word模板说明:这里是固定的模板,其实除了这种方法,也可以用html直接生成pdf,毕竟pdf本身就是html生成的。但是这种方法简单粗暴,后期便于维护和更改,只要改模板样式,整个结果也会改变。真香... 这里的{{ }} 中间的参数就是代码中要传入替换的参数(这个和jin2模板语法基本是一样的哦)
def fun():
df2=pd.read_excel(file_path1,names=[---],converters={0:str})
df1=pd.read_excel(file_path2,names=[---],converters={0:str})
#遍历df2
for row in df2.itertuples():
#调研编号
dybh=getattr(row,'---')
print(dybh)
#填写
tpl = DocxTemplate('模板.docx')
context = {
'jine': jine,
'dybh':dybh,
'dyzl':dyzl,
'ysxm':ysxm,
'yssj':yssj,
'yssf':yssf,
'khh':khh,
'zh':zh,
'sj':start.get()
}
tpl.render(context)
data_d=str(datetime.date.today())#时间
b_name="D:\\" + dyzl+sf+cs+yymc+ysxm+data_d+".docx"
tpl.save(b_name)
pdf结果:
pdf生成说明:这个生成方法
# 设定pdf要保存的位置
pdf_path = "D:\\" + dyzl+sf+cs+yymc+ysxm+data_d+".pdf" # 就保存在当前文件夹下
# 下面是实现代码
gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
# 启用word功能
wd = Dispatch('Word.Application')
# 用windows下的word功能以只读方式打开我们要处理的word文档
doc = wd.Documents.Open(docx_path, ReadOnly=1)
# 输出方式
doc.ExportAsFixedFormat(pdf_path, constants.wdExportFormatPDF, Item=constants.wdExportDocumentWithMarkup,
CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
doc.Close()
# 退出word功能
wd.Quit(constants.wdDoNotSaveChanges)
time.sleep(5)
os.remove(b_name)
另:本工作室长期接单,放单。涉及领域有python java 前后端 机器学习 网站 系统 app 小程序等。
需要接单加v备注技术领域:ad2021wyz 或q 进接单群的加 2234590550 备注清楚领域
需要源码和代做需求的加v备注客户:ad2020wyz