批量打印工作表
import os
import xlwings as xw
file_path = 'D:\\TEST\\python与excel'
file_list = os.listdir(file_path)
app = xw.App(visible=False,add_book=False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path,i)
workbook = app.books.open(file_paths)
# 打印工作簿;xlwings模块没有提供打印工作簿的函数,利用工作簿对象的api属性调用VBA的PrintOut()函数来打印工作簿
print(i)
# workbook.api.PrintOut()
# workbook.api.PrintOut(From=1,To=3,Copies=1,Preview=True,PrintToFile=True,PrToFileName='测试文件')
workbook.api.PrintOut(From=1,To=1,Copies=1,Preview=True,PrintToFile=True,PrToFileName='测试文件')
# workbook.api.PrintOut(Preview=True,From=1,Copies=1)
app.quit()
上面xlwings.api.vba方法可以直接调用vba中方法。
vba中Printout方法说明:
语法格式:
expression.PrintOut (From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)
Name | Required/Optional | Description |
From | 可选 | 数字类型,打印的起始页,如果为空则从开始页打印 |
To | 可选 | 数字类型,打印的结束页,如果为空则打印到最后一页 |
Copies | 可选 | 数字类型,设置打印几份,如果为空则打印一份。 |
Preview | 可选 | 布尔类型,默认False。为True时打印前先预览,False时直接打印。 |
ActivePrinter | 可选 | 设置用于本次打印的打印机名称,如果为空则用系统指定打印机执行。 |
PrintToFile | 可选 | 布尔类型,默认False。为True时,则打印到prn文件,不打印到到打印机。False时打印到 打印机。如果为True且PrToFileName参数没有指定,则系统会提示输入文件名称。 |
Collate | 可选 | 布尔类型,默认为True,为True时逐份打印多个副本。 |
PrToFileName | 可选 | 字符类型,当PrintToFile参数为True时,该参数指定prn文件的名称。 |
IgnorePrintAreas | 可选 | 布尔类型,为True时忽略excel中的打印区域设置,直接打印整个文件。 |
注意1:From和To参数指定的打印起始页并非excel文件中的起始页或者终止页,而是打印机打印的打印的起止页,即手工打印时设置的起止页码。
注意2:这个语句:workbook.api.PrintOut(From=1,To=1,Copies=1,Preview=True,PrintToFile=True,PrToFileName='测试文件')有的时候打印不出来,这时候考虑一下是否是起始页、终止页、预览几个参数的设置问题。也有可能是系统打印机设置的问题。