Search code examples
excelcomautomation

ExportAsFixedFormat with Excel fails


I try to convert Excel files to PDF via COM automation. The code runs as a service using the system user. Unfortunately, I get the error "0x800A03EC" in the ExportAsFixedFormat() function. It works when I run this in an interactive session.

I've heard the systemprofile needs a Desktop folder, so I added those.

I've heard this also might have to do with the system user not having a default printer, so I added values to the following keys:

HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Devices
HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts

But this only makes Excel hang instead of throwing an exception immediately.

I'm out of ideas and thankful for any help.


Solution

  • You have to select a default printer for this user. Try to import following code into your registry. Note: Replace these printers for your own (virtual) printers.

    Windows Registry Editor Version 5.00
    
    [HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Devices]
    "Send To OneNote 2010"="winspool,nul:"
    "Microsoft XPS Document Writer"="winspool,Ne00:"
    
    [HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts]
    "Send To OneNote 2010"="winspool,nul:,15,45"
    "Microsoft XPS Document Writer"="winspool,Ne00:,15,45"
    
    [HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Windows]
    "UserSelectedDefault"=dword:00000000
    "Device"="Send To OneNote 2010,winspool,nul:"
    

    Of course you still have to create your Desktop folder in

    C:\Windows\SysWOW64\config\systemprofile
    

    or in

    C:\Windows\System32\config\systemprofile
    

    depending on your setup.

    After these steps you should be able to export Word, Powerpoint and Excel to PDF by using a regular, non-interactive service (e.g. Windows NT/SYSTEM user). You don't need any alterations in your Component Services