为什么无法在未打开 RDP 连接的情况下 Python 在 VM 上设置 Excel 打印区域?

Why can't Python set the Excel print area on a VM without open RDP connection?

我正在尝试使用 win32com 打印 Excel sheet。如果我有 运行 开启的 VM 的远程桌面连接,这会正常工作,但如果我断开连接,任务就会失败。

我遇到了两个相关错误:

1) 设置打印区域Excel:

2) 未设置打印区域,但使用 Python

设置了 PageSetup

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

这是我为 Excel 包装的 class:

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 无法设置或获取页面设置属性。

source

可能的解决方案

因此,确保脚本是 运行 一个帐户:

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

相关:

  • Unable to set the PaperSize property of the PageSetup class