为什么 Python 无法在没有打开 RDP 连接的 VM 上设置 Excel 打印区域?



我正在尝试使用win32com来打印Excel工作表。如果我有运行此 VM 的远程桌面连接,则此方法工作正常,但如果断开连接,任务将失败。

我遇到了两个相关的错误:

1(在Excel中设置打印区域:

  • 连接到 VM:文件按预期打印
  • 连接:文件打印但未设置打印区域,因此溢出到多个页面上

2(未设置打印区域,但使用Python设置页面设置

  • 连接到 VM:文件按预期打印
  • 未连接:文件无法打印,出现 1004 错误"无法设置 PageSetup 类的 PaperSize 属性">

此错误的其他问题表明打印机驱动程序丢失,但对我来说并非如此,因为当我通过 RDP 连接到 VM 时,它打印正常。

这是我的 Excel 包装类:

from pathlib import Path
import pythoncom
import win32com.client
from utils.excel.constants import XLQUALITY_STANDARD
from utils.excel.constants impor
class ExcelApp:
def __init__(self, is_visible=False):
pythoncom.CoInitialize()
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = is_visible
self.app = excel
def __getattr__(self, item):
return getattr(self.app, item)
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.app.Quit()
def open(self, path):
path = self._regularise_path(path)
return self.app.Workbooks.Open(path)
def _regularise_path(self, path):
path = str(Path(path).absolute())
if ":\" not in path:
path = path.replace(":", ":\")
return path
def close(self, wb, prompt=False):
wb.Close(prompt)
def save_as_pdf(
self,
wb,
sheets,
path,
quality=XLQUALITY_STANDARD,
include_doc_properties=False,
ignore_print_areas=False,
page_setup=None,
):
page_setup = page_setup or {}
path = self._regularise_path(path)
wb.WorkSheets(sheets).Select()
for prop, val in page_setup.items():
setattr(wb.ActiveSheet.PageSetup, prop, val)
wb.ActiveSheet.ExportAsFixedFormat(XLTYPE_PDF, path, quality, include_doc_properties, ignore_print_areas)

和调用代码:

page_setup = {"Zoom": False, "FitToPagesTall": 1, "FitToPagesWide": 1, "PaperSize": XLPAPER_TABLOID}
with ExcelApp() as excel:
wb = excel.open(src)
excel.save_as_pdf(wb, sheets, dst, page_setup=page_setup)

问题的可能来源

当您的计算机上没有选择默认打印机时,会出现此问题。Excel 无法设置或获取页面设置属性。

可能的解决方案

因此,请确保脚本使用符合以下条件的帐户运行:

  1. 至少设置了一台打印机。
  2. 设置了默认打印机 - 这是必须的!

相关:

  • 无法设置 PageSetup 类的 PaperSize 属性
  • https://stackoverflow.com/a/23503999/426315
  • https://stackoverflow.com/a/57613740/426315

最新更新