【问题标题】:Printing Excel sheets one sided/single sided in python在python中单面/单面打印Excel表格
【发布时间】:2021-12-06 22:16:43
【问题描述】:

我在 python 中编写了一个脚本,用于填充从 kivy 界面获取的 excel 表中的某些单元格。它应该发送一封包含输入数据的电子邮件,并填写一些 Excel 表格。它可以正常工作,但最后一部分是自动打印纸张.. :D 我遇到了一个脚本,它可以自动打印,唯一的问题是我不知道如何让它打印单面双面的。

我正在使用 openpyxl 来调整工作表中的数据,并且该库具有一些可以更改打印机设置(例如边距)的功能,但是我没有找到有关单面打印的任何信息。另外,我没有找到如何使用openpyxl进行打印,这就是我使用win32com的原因。

import os, win32com.client

o = win32com.client.Dispatch('Excel.Application')
o.visible = True
wb = o.Workbooks.Open(path)
ws = wb.Worksheets([1 ,2 ,3])
ws.PrintOut()

有人知道如何将打印机输出更改为单面页面吗?

感谢您的时间和关注。

【问题讨论】:

标签: python printing


【解决方案1】:

感谢@yoonghm 和他的链接,我找到了如何让它为我工作。

import win32api
import win32print
import win32com.client
from win32com.shell import shellcon, shell


o = win32com.client.Dispatch('Excel.Application')
o.visible = False
wb = o.Workbooks.Open(file_path)
printlist = [i+1 for i in sheetlist[:printamount]]
ws = wb.Worksheets(printlist)

#set to single sided
name = win32print.GetDefaultPrinter()
printdefaults = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
handle = win32print.OpenPrinter(name, printdefaults)
level = 8
attributes = win32print.GetPrinter(handle, level)
attributes['pDevMode'].Duplex = 1
win32print.SetPrinter(handle, level, attributes, 0)
win32print.GetPrinter(handle, level)['pDevMode'].Duplex
##    shell.ShellExecuteEx(lpVerb='print', lpFile=file_path, lpParameters=name)
    
ws.PrintOut()
    
win32print.ClosePrinter(handle)
wb.Close()

attributes['pDevMode'].Duplex 用于单面打印,唯一的问题是在链接中,通过使用 level = 2:'pDevMode' 不在我的打印机的属性中。对我来说,它必须是 level = 8。

我没有使用链接使用的注释行打印,因为它没有打印所有四个工作表。将打印列表调整为您想要的工作表并使用 ws.PrintOut() 打印就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多