读取excel数据,根据word模板生成word文件。【python】【word vba】两种方法

本文介绍了如何利用python的docxtpl库和word VBA,从`首次签合同人员.xlsx`的数据中,结合`简易劳动合同.docx`模板批量生成并打印word文件。文中提到使用python过程中可能出现的多窗口问题以及VBA实现的批量生成和打印功能。
摘要由CSDN通过智能技术生成

1、背景

行政部的同事每次都要根据excel里面的信息,制作word版的劳动合同,然后他们有一天找到了我,问我可不可以帮忙。

首次签合同人员.xlsx

需要获取该表的【姓名】【证件号码】【岗位】【到职日期】
首次签合同人员.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 = 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值