“通过COM从Excel打印没有安装打印机”
我在64位Windows 2012 R2服务器上运行IBM Domino 9.0的LotusScript代码,该服务器使用COM启动Microsoft Excel 2010,打开工作簿,然后通过PDFCreator打印(来自PDFForge)将工作簿转换为PDF。
IBM Domino作为SYSTEM用户下的服务运行,所以Excel和PDFCreator在我的代码启动时也在该用户下运行。“通过COM从Excel打印没有安装打印机”
直到两天前,这工作正常,然后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文件的字符串变量,在代码的其他地方设置。
我已经能够通过编辑Windows服务器上的注册表来解决这个问题。
我发现,在 “设备” 和 “PrinterPorts” 此注册表项的孩子admin用户列出的打印机:
HKEY_USERS \ S-1-5-19 \软件\微软\的Windows NT \ CURRENTVERSION
我将这些密钥复制到“.DEFAULT”用户,现在我的代码运行时没有错误。