• 如下图所示,工作簿“各月销售数量表.xlsx”中有12个工作表,本案例要通过Python编程批量打印这些工作表。
import xlwings as xw
app = xw.App(visible=False,add_book=False) #启动Excel程序
workbook = app.books.open('各月销售数量表.xlsx') #打开要打印的工作簿
workbook.api.PrintOut(Copies=2,ActivePrinter='DESKTOP-HP01',Collate=True) #打印工作簿
workbook.close()
app.quit()
  • 第3行代码用于打开工作簿“各月销售数量表.xlsx”。第4行代码用于打印工作簿中的所有工作表,这里指定打印份数为两份,打印机为“DESKTOP-HP01”,读者可根据实际需求修改打印份数和打印机的名称。打印完成后,使用第5行和第6行代码关闭工作簿并退出Excel程序。
  • xlwings模块没有提供打印工作簿的函数,所以第4行代码利用xlwings模块中Book对象的api属性调用VBA的PrintOut()函数来打印工作簿。该函数的参数Copies用于指定打印份数,如果省略该参数,则只打印一份;参数ActivePrinter用于设置要使用的打印机的名称,如果省略该参数,则表示使用操作系统的默认打印机;参数Collate如果为True,表示逐份打印。

143 打印一个工作簿中的一个工作表

  • 如果只想打印工作簿“各月销售数量表.xlsx”中的单个工作表,如“1月”,也可以在Python中通过调用VBA的PrintOut()函数来实现。
import xlwings as xw
app = xw.App(visible=False,add_book=False) #启动Excel程序
workbook = app.books.open('各月销售数量表.xlsx') #打开要打印的工作簿
worksheet = workbook.sheets['1月'] #要打印的工作表
worksheet.api.PrintOut(Copies=2,ActivePrinter='DESKTOP-HP01',Collate=True) #打印指定工作表
workbook.close()
app.quit()
  • 第3行代码用于打开工作簿“各月销售数量表.xlsx”。第4行代码用于指定要打印的工作表,这里指定为“1月”,读者可根据实际需求修改工作表名称。第5行代码用于将工作表打印两份,读者可根据实际需求修改打印份数和打印机的名称。打印完成后,使用第6行和第7行代码关闭工作簿并退出Excel程序。

144 打印多个工作簿

  • 如右图所示,文件夹“各地区销售数量”下有3个工作簿,本案例要通过Python编程批量打印这些工作簿。
  • python 打印接口 python 打印机_缩放比例


from pathlib import Path
import xlwings as xw
folder_path = Path('D:\各地区销售数量') #给出工作簿所在文件夹的路径
file_list = folder_path.glob('*.xlsx*') #获取文件夹下所有工作簿的文件路径
app = xw.App(visible=False,add_book=False) #启动Excel程序
for i in file_list:
    workbook = app.books.open(i) #打开一个工作簿
    workbook.api.PrintOut(Copies=1, ActivePrinter='DESKTOP-HP01', Collate=True)  # 打印工作簿
    workbook.close()
app.quit()

145 打印多个工作簿中的同名工作表

  • 如下左图所示为文件夹“各地区销售数量”下的3个工作簿。如下右图所示为工作簿“北京销售数量表.xlsx”中的工作表“销售数量”,其他工作簿中也有同名的工作表。现要批量打印这3个工作簿中的工作表“销售数量”。
  • python 打印接口 python 打印机_python_02


  • python 打印接口 python 打印机_App_03


146 打印工作表的指定单元格区域

  • 如下页图所示为工作簿“销售表.xlsx”的工作表“总表”中的数据,如果只想打印该工作表中单元格区域A1:I10的内容,可以在Python代码中设置打印区域。
  • python 打印接口 python 打印机_excel_04


  • 第5行代码用于指定要打印的单元格区域,这里指定为A1:I10。读者可根据实际需求修改单元格区域,例如,如果要打印多个不相邻的单元格区域,可以将第5行代码修改为“area=worksheet.range(‘A1:I10,A130:I160’)”。

147 按指定的缩放比例打印工作表

import xlwings as xw
app = xw.App(visible=False,add_book=False) #启动Excel程序
workbook = app.books.open('销售表.xlsx') #打开指定的工作簿
worksheet = workbook.sheets['总表'] #指定工作簿中的工作表‘总表’
worksheet.api.PageSetup.Zoom = 80 #设置打印工作表的缩放比例
worksheet.api.PrintOut(Copies=2,ActivePrinter='DESKTOP-HP01',Collate=True) #打印工作表
workbook.close()
app.quit()
  • 第5行代码用于设置打印工作表的缩放比例,这里设置为80,即按工作表原始大小的80%进行打印,读者可根据实际需求修改缩放比例。
  • 因为xlwings模块未提供设置打印缩放比例的方法,所以在第5行代码中利用Sheet对象的api属性调用VBA的接口来达到目的。PageSetup是VBA中的一个对象,它的Zoom属性用于设置打印的缩放比例,可取的值为10~400范围内的数字,代表10%~400%的缩放比例。

148 在纸张的居中位置打印工作表

  • 默认情况下,打印的内容在纸张中整体靠左上角对齐。如果想要让打印的内容在纸张中整体居中,可在Python中调用VBA的CenterHorizontally和CenterVertically属性来实现。
import xlwings as xw
app = xw.App(visible=False,add_book=False) #启动Excel程序
workbook = app.books.open('各月销售数量表.xlsx') #打开指定的工作簿
worksheet = workbook.sheets['1月'] #指定工作簿中的工作表‘总表’
worksheet.api.PageSetup.PrintHeadings = True #设置打印工作表时打印行号和列号
worksheet.api.PrintOut(Copies=1,ActivePrinter='DESKTOP-HP01',Collate=True) #打印工作表
workbook.close()
app.quit()

150 重复打印工作表的标题行

  • 如果要在打印稿的每一页顶部都打印标题行,可在Python中调用VBA中的PrintTitleRows属性来实现。
import xlwings as xw
app = xw.App(visible=False,add_book=False) #启动Excel程序
workbook = app.books.open('销售表.xlsx') #打开指定的工作簿
worksheet = workbook.sheets['总表'] #指定工作簿中的工作表‘总表’
worksheet.api.PageSetup.PrintTitleRows = '$1:$1' #将工作表的第1行设置为要重复打印的标题行
worksheet.api.PageSetup.Zoom = 55 #设置打印工作表的缩放比例
worksheet.api.PrintOut(Copies=1,ActivePrinter='DESKTOP-HP01',Collate=True) #打印工作表
workbook.close()
app.quit()
  • 第5行代码用于设置要重复打印的标题行,这里设置为工作表的第1行。读者可根据实际需求修改作为标题行的单元格区域,例如,如果要将工作表的第2行设置为标题行,可将第5行代码修改为
• “worksheet.api.PageSetup.PrintTitleRows=’$2:$2’”