python 打印doc和excel
前阵子做了一个小工具,利用doc模板实现批量构造文档和打印,其中的打印功能查找很多文档才实现,现在单独记录下来,以备不时之需
DispatchEx模块
用到DispatchEx模块,首先安装 pywin32并导入
上代码
import os
from win32com.client import DispatchEx
import time
from queue import Queue
# 创建一个空队列 用于存放文件夹内所有文件名
q = Queue(600)
# 方法 遍历文件夹 将该文件夹下包括所有子文件夹下所有文档路径存入列表
def traver(path):
pathlist = os.listdir(path)
for file in pathlist:
abspath = os.path.join(path, file)
if os.path.isfile(abspath):
# 将文件名放入队列里
q.put(abspath)
else:
traver(abspath)
# break
# 通过路径 打印文档 队列q是全局变量 这里不用传参数
def docx_print():
while True:
if q.empty():
break
else:
# 取出一个
f = q.get()
# 通过对路径字符串切片后,取到扩展名,用于判断是表格还是文档
eName = f.split('.')[-1]
if eName == 'xls' or eName == 'xlsx':
#w = DispatchEx('excel.Application')
w = DispatchEx('excel.Application')
w.Visible = 0 #不打开软件
w.DisplayAlerts = 0 #不报错
doc = w.Workbooks.Open(f).Worksheets('Sheet1')
elif eName == 'doc' or eName == 'docx':
w = DispatchEx('kwps.Application')
w.Visible = 0 # 不打开软件
w.DisplayAlerts = 0 # 不报错
doc = w.Documents.Open(f)
print("正在打印:{}".format(f))
doc.PrintOut()
time.sleep(1)
w.Quit()
if __name__ == '__main__':
## 需要打印文件或文件夹的路径
path = r'C:\Users\...\Desktop\...'
traver(path)
print("文件读取完毕,共有{}个".format(q.qsize()))
docx_print()
说明
1.打印效果很不错,不会弹出word软件,excel和word都能做到自动打印,只要将想要输出的打印机设为系统默认打印机即可
2.可以打印路径下,文件夹和子文件夹内所有符合条件的
3.暂时只做了文档和表格,图片、pdf打印比较复杂,以后再完善
4.暂时只想起来这么多