“没有安装打印机”通过COM从Excel打印

时间:2014-12-02 07:06:02

标签: excel com windows-server

我在64位Windows 2012 R2服务器上运行IBM Domino 9.0中的LotusScript代码,该服务器使用COM启动Microsoft Excel 2010,打开工作簿,然后通过PDFCreator(从PDFForge)打印以将工作簿转换为PDF 。
IBM Domino在SYSTEM用户下作为服务运行,因此当我的代码启动时,Excel和PDFCreator也在该用户下运行。

直到两天前,这个工作正常,然后PDFCreator开始挂起,无缘无故我已经确定。

客户的其中一位管理员重新安装了Excel和PDFCreator,并删除了Windows用户配置文件(虽然我不知道哪个用户)。现在PDFCreator正在启动,但Excel存在一些问题。

我修改了一些Excel问题,修改了我的代码和操作系统文件系统,但现在的问题是当我的代码告诉Excel打印工作簿时,会发生以下错误:

Microsoft Excel: No printers are installed. To install a printer click the File tab, and then click Print.
Click No Printers Installed, and then click Add Printer. Follow the instructions in the Add Printer dialog box.

尝试使用我的代码进行打印时,才会出现此错误 我可以作为管理员用户启动Excel并手动打印,打印对话框中有三台打印机(包括PDFCreator)。

在我看来,SYSTEM用户看不到打印机,但我不知道如何验证或修复它。
我该怎么办呢?

接下来是几段代码。为简洁起见,我删除了一些错误处理和其他事项。

以下代码启动PDFCreator:

Set pdfCreator=CreateObject("PDFCreator.clsPDFCreator")
If pdfCreator.cStart("/ClearCache /NoProcessingAtStartup") Then
    pdfCreator.cClearCache
    pdfCreator.cOption("PrinterTemppath")=pdfTmpDir
    pdfCreator.cOption("UseAutosave")=1
    pdfCreator.cOption("UseAutosaveDirectory")=1
    pdfCreator.cOption("AutosaveDirectory")=pdfTmpDir
    pdfCreator.cOption("AutosaveFormat")=0
    pdfCreator.cSaveOptions
    pdfCreator.cDefaultPrinter="PDFCreator"
End If

pdfTmpDir是一个字符串变量,包含一个目录路径,在代码的其他地方设置。

这些行启动Excel:

Set xlApp=CreateObject("Excel.Application")
xlApp.Visible=False

这些行打开现有工作簿并打印出来。

Set xlBook=xlApp.Workbooks.Open(ceBCMSheet)
xlBook.PrintOut ,,1,False,"PDFCreator"

ceBCMSheet是一个字符串变量,包含XLS文件的完整路径,在代码的其他位置设置。

1 个答案:

答案 0 :(得分:0)

我已经能够通过编辑Windows服务器上的注册表来解决这个问题。

我在此注册表项的“Devices”和“PrinterPorts”子项中找到了为admin用户列出的打印机:
HKEY_USERS \ S-1-5-19 \ Software \ Microsoft \ Windows NT \ CurrentVersion

我将这些密钥复制到“.DEFAULT”用户,现在我的代码运行没有错误。