1、背景
行政部的同事每次都要根据excel里面的信息,制作word版的劳动合同,然后他们有一天找到了我,问我可不可以帮忙。
首次签合同人员.xlsx
需要获取该表的【姓名】【证件号码】【岗位】【到职日期】
模板:简易劳动合同.docx
原来的word模板如下
因为用python的docxtpl批量修改就要把需要替换的地方用2个花括号+变量名。例如:{
{name}},表示这个变量名是name.修改后word模板如下:
2、python代码
#-*-coding:utf-8-*-
from docxtpl import DocxTemplate
import xlrd#要1.2.0版本or其他可用版本!!!我下了个2.1.0的版本,打不开xlsx文件。
import os
import win32api,win32con,win32print,win32gui
import sys
from dateutil.relativedelta import relativedelta
import time
import shutil
def printer_loading(filename):
#用win32api.ShellExecute发送打印文件命令
open(filename, "r")
"""
打开文件,这个只有open,没有close,所以会打开很多窗口。
如果用with open我的电脑会出现“word还有对话框正在打开,不能强制关闭”的问题。
如果不执行这一句,下面的打印命令发送了没反应???不知道是不是我的电脑有问题
"""
print("打开:",filename)
time.sleep(3)#公司的电脑不行,要等待一下
win32api.ShellExecute(
0,
"print",#执行【打印】操作
filename,#文件路径
'/d:"%s"' % win32print.GetDefaultPrinter(),#打印机设定:默认打印机
".",
0
)
def close_word():
"""
关闭多余的word窗口???大概是这个功能
主要是我的电脑如果不关闭窗口,打开了15个窗口它就会出现问题,文字消失了!!!!
我的微信、鼠标右键菜单等.....文字都消失了,不知道为啥
"""
while True:
time.sleep(0.5)
hwnd = win32gui.FindWindow("OpusApp", None)#找到word的句柄
# print(hwnd)
if hwnd == 0:#如果没有找到hwnd就说明没有word窗口了
break
# print("关闭",win32gui.GetWindowText(hwnd))
win32gui.PostMessage(hwnd, win32con.WM_NULL, 0, 0)#发送关闭窗口的命令
def message_exit(msg,exit=True):#弹窗+退出程序
win32api.MessageBox(0, msg, "提示",win32con.MB_OK)
if exit:
win32api.MessageBox(0, "退出程序", "提示",win32con.MB_OK)
sys.exit()
def main():
try:
current_path = os.getcwd()#当前路径
excel_path = os.path.join(current_path,"首次签合同人员.xlsx")#excel数据文件路径
doc_path = os.path.join(current_path,"模板:简易劳动合同.docx")#word模板文件路径
result_dir = os.path.join(current_path,"结果")#生成的文件放在这个文件夹里
if not os.path.exists(excel_path):#是否找到工作簿
message_exit("没有找到excel工作簿\n"+excel_path,exit=True)
if not os.path.exists(doc_path):#是否找到word文件
message_exit("没有找到word文件\n"+doc_path,exit=True)
if os.path.exists(result_dir):#当前文件夹下是否已经存在【结果】文件夹,如果存在,手动删除
message_exit("请先手动删除结果文件夹\n程序退出" + result_dir, exit=True)
os.makedirs(result_dir)#创建【结果】文件夹
excel_content =