使用Python的xlwings模块批量打印工作簿

使用Python的xlwings模块和vba对Excel的工作簿进行批量的打印
格式:workbook.PrintOut(From、 To、副本、 Preview、 ActivePrinter、 PrintToFile、 Collate、 PrToFileName、 IgnorePrintAreas)
表达式一个代表工作簿 对象的变量。

参数:

名称 必需/可选 数据类型 说明
From 可选 Variant 打印的开始页号。 如果省略此参数,则从起始位置开始打印。
To 可选 Variant 打印的终止页号。 如果省略此参数,则打印至最后一页。
Copies 可选 Variant 打印份数。 如果省略此参数,则只打印一份。
Preview 可选 Variant 如果为 True,Microsoft Excel 将在打印对象之前调用打印预览。 如果为 False(或省略该参数),则立即打印对象。
ActivePrinter 可选 Variant 设置活动打印机的名称。
PrintToFile 可选 Variant 如果为 True,则打印到文件。 如果没有指定 PrToFileName,Microsoft Excel 将提示用户输入要使用的输出文件的文件名。
Collate 可选 Variant 如果为 True,则逐份打印多个副本。
PrToFileName 可选 Variant 如果将PrintToFile设置为True, 则此参数指定要打印到的文件的名称。
IgnorePrintAreas 可选 Variant 如果为 True,则忽略打印区域并打印整个对象。

import os  # 导入os模块
import xlwings as xw  # 导入xlwings模块

file_path = 'E:\\pythonExample\\01'  # 定义工作簿所在的文件夹路径
file_list = os.listdir(file_path)  # 列出指定路径下的文件及文件夹名称
sheet_name = '产品销售区域'  # 定义工作簿名中新的工作表名称
file_type = ['.xlsx','.xls']  # 定义文件类型列表,用于判断是否为excel文件

app = xw.App(visible=True, add_book=False)

for i in file_list:
    # 判断是否有文件名为“~$”开头的临时文件,startswith(substr,beg,end)
    if i.startswith('~$'):
        continue  # 如果有,则跳过这种类型的文件
    # 拼接工作簿中新的工作表的文件路径
    file_paths = os.path.join(file_path, i)
    # 判断是否为Excel文件,通过扩展名.xls和.xlsx判断
    file_ext = os.path.splitext(i)[1]
    #  判断是不是文件且为excel文件
    if (os.path.isfile(file_paths)) and (file_ext  in file_type):
        wb = app.books.open(file_paths)  # 打开工作簿
        wb.api.PrintOut()  # 打印工作薄
        # wb.api.PrintOut(From=1,To=1,Copies=1,Preview=True)  # 打印工作薄
    else:
        print('文件名为:%s的文件不是excel文件!' %i)
        continue
app.quit()

批量打印多个工作簿中的指定工作表

import os  # 导入os模块
import xlwings as xw  # 导入xlwings模块

file_path = 'E:\\pythonExample\\01'  # 定义工作簿所在的文件夹路径
file_list = os.listdir(file_path)  # 列出指定路径下的文件及文件夹名称
sheet_name = '产品分类表'  # 定义工作簿名中新的工作表名称
file_type = ['.xlsx','.xls']  # 定义文件类型列表,用于判断是否为excel文件

app = xw.App(visible=True, add_book=False)

for i in file_list:
    # 判断是否有文件名为“~$”开头的临时文件,startswith(substr,beg,end)
    if i.startswith('~$'):
        continue  # 如果有,则跳过这种类型的文件
    # 拼接工作簿中新的工作表的文件路径
    file_paths = os.path.join(file_path, i)
    # 判断是否为Excel文件,通过扩展名.xls和.xlsx判断
    file_ext = os.path.splitext(i)[1]
    #  判断是不是文件且为excel文件
    if (os.path.isfile(file_paths)) and (file_ext  in file_type):
        wb = app.books.open(file_paths)  # 打开工作簿
        for j in wb.sheets:
            if j.name == sheet_name:  # 判断工作簿中的工作表是否为要打印的表名称
                print(j.name)
                wb.api.PrintOut('','','',Preview=True)  # 打印工作薄
                break
    else:
        print('文件名为:%s的文件不是excel文件!' %i)
        continue
app.quit()