批量打印参考文章:https://blog.csdn.net/weixin_44102434/article/details/85006593
代码
相对原作者做了一点修改,因为我这里需要更改打印缩放和页边距
#coding=UTF-8
#-*-conding : gb2312 -*-
import os
import win32com.client
import win32api
import time
dir_name = r'E:\邮件附件\绩效评价' #文件路径
file_name=os.listdir(dir_name) #路径下文件名称
file_dir =[os.path.join(dir_name,x) for x in file_name] #得到文件路径
def centimetersToPoints(num):
return format(num*28.346,'3f')
#厘米转成磅数,1cm = 28.346磅
#保留三位小数,其实这样会有问题,因为去掉了尾数,在excel中显示的就不是原来的厘米
#比如0.76就会变成0.8
b=len(file_dir)
i = 0
for i in range(len(file_dir)):
xlApp = win32com.client.Dispatch('Excel.Application') #打开 EXCEL ,这里不需改动
xlApp.Visible = 0 #不在后台运行
xlApp.EnableEvents = False
xlApp.DisplayAlerts = False #显示弹窗
xlBook = xlApp.Workbooks.Open(file_dir[i])
xlApp.ActiveWorkbook.Sheets(1).PageSetup.Zoom = 60 #设置缩放
xlApp.ActiveWorkbook.Sheets(1).PageSetup.TopMargin = centimetersToPoints(0.76)
xlApp.ActiveWorkbook.Sheets(1).PageSetup.BottomMargin = centimetersToPoints(0.76)
xlApp.ActiveWorkbook.Sheets(1).PageSetup.HeaderMargin = centimetersToPoints(1.91)
xlApp.ActiveWorkbook.Sheets(1).PageSetup.FooterMargin = centimetersToPoints(1.91)
xlApp.ActiveWorkbook.Sheets(1).PageSetup.LeftMargin = centimetersToPoints(1.5)
xlApp.ActiveWorkbook.Sheets(1).PageSetup.RightMargin = centimetersToPoints(0.2)
#上面几行设置打印边距
xlApp.ActiveWorkbook.Sheets(1).PageSetup.Orientation = 1
#0是横向,1是纵向;不能用微软VBA文档的xlLandscape和xlPortrait
xlBook.Save() #保存
ename = xlApp.ActiveWorkbook.name #获取打开工作表名称
#xlBook.PrintOut() #打印
xlApp.quit() #退出
print(ename,"%d%%" %(((i+1.0)/b)*100.0)) #打印出打开工作表名称和当前百分比进度
#time.sleep(2)
time.sleep(2)
打印格式设置参考
https://docs.microsoft.com/zh-cn/office/vba/api/excel.pagesetup.zoom
win32com相当于调用VBA吧?
pywintypes.com_error: (-2147352567
使用win32com处理excel时遇到的错误。问题的出现原因并不是接入的方式或者其他什么原因,而是一个很简单的原因:当前程序没有对目标文件的支配权限。其中一个的原因是,文件读写速度较快,上一个excel的关闭操作未完成,就开始下一个文件的读取。一般的解决办法是用time.sleep等程序完成关闭操作。
我这里的情况是已经运行了一次py脚本,再运行就会报这个错误,报错的文件双击点开显示有时有问题有时没有,关闭后再运行就没问题了。
非常奇怪,再次运行还是没有问题。这两次唯一的区别就是我运行的时候,没有在文件资源管理器点击选中相应的文件(没有打开),所以说,在我单击选中的时候,系统就已经开始预加载了?以至于脚本不能读取文件。
上面的判断错了,经过多次测试,原因是代码运行时发生错误,修改后,由于发生错误时直接切断程序,没有调用quit()方法,导致文件实际上没有关闭。点击右上角的三角按钮Ctrl+Alt+N
运行时就会这样,正常F5运行不会。
这是搜到的那位博主的解释:https://www.cnblogs.com/vhills/p/8098715.html
奇奇怪怪的bug和问题
openpyxl sheet_index起始为0
为什么载入表格后,用sheet_index访问工作表,ws[0]访问不了
运行代码的时候,不知道为什么,会打开excel操作,按理说操作在桌面是隐藏的,之前已经设置了。想来想去,唯一的原因可能是我运行前已经打开了一张表,尽管这张表不是要操作的表。