У меня есть функция, в которую я передаю экземпляр Microsoft.Office.Interop.Excel.Application. Функция использует встроенный факсимильный принтер Windows или Microsoft XPS Document Writer для сохранения файла в виде tiff-изображения.COMException при назначении Excel.Application.ActivePrinter
Однако, когда я пытаюсь присвоить свойству ActivePrinter приложения, COMException со следующим сообщением брошено:
Исключение из HRESULT: 0x800A03EC
Вот код:
'Save the current default printer
Dim strDefaultPrinter As String = excelApp.ActivePrinter
'Assign printer string constant to ActivePrinter - throws exception
excelApp.ActivePrinter = FAX_PRINTER
excelApp.ActiveWorkbook.PrintOutEx(, , , , , True, "c:\RestOfFilePath...") ' Print to file = true
'Reset the default printer
excelApp.ActivePrinter = strDefaultPrinter
Все используемые принтеры подтверждены как установленные/в реестре. Аналогичная функция, использующая класс приложения Word, отлично работает. Я довольно новичок в вещах, связанных с COM, и у меня такое чувство, что это может быть просто мое невежество, связанное с игрой, но я не могу найти почти ничего, что связано с этим при поиске google/stackoverflow, за исключением одного или двух старых, неотвеченные темы. Есть несколько, которые связаны с большими объемами данных/больших диапазонов, но не свойство ActivePrinter
EDIT - краткое резюме ответа, подробно описано в ссылке M Патель:
Excel придирчив о настройке это ActivePrinter имущество; вместо имени принтера, он требует как принтера, так и порта, например. «Факс на Ne01:». Этот порт должен быть доступен из реестра, либо по адресу:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Устройства
или
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Devices
Используя метод, подробно описанный в ссылке, o r в моем случае с использованием Microsoft.Win32.Registry.GetValue(). Последний вернет что-то по линии «winspool, Ne01:». Объединение последней части этой строки с именем принтера в порядке «Факс на Ne01:» позволяет устанавливать свойство ActivePrinter без исключения.
Я хотел бы также отметить, что моя проблема происходила в Excel 2010
проблема все еще существует в Excel 2013. И конкатенация переводится с языка пользователя в Excel. Я добавил свое решение по адресу http://stackoverflow.com/questions/29921150/c-sharp-setting-a-printer/32862651#32862651 –