Voor mijn stageopdracht moet ik onder andere een MS Office (97 in dit geval) bestand om te zetten naar een PostScript bestand in VC++ en met behulp van MFC.
Dit wil ik doen door te printen naar een toegevoegde lokale printer wat niet de default printer is.
Hiervoor wil ik dus tijdelijk de standaard printer wijzigen, het bestand sturen, de printer terugzetten.
Met behulp van de tutorial Use Automation to Set the Printer from an MFC Project heb ik een volgende testmethode opgezet:
"Unable to set the ActivePrinter property", wat er op duid dat de printer niet gevonden kan worden of de eigenschap readonly is.
Dit terwijl dezelfde code wel werkt voor een MS Word object.
De MSDN pagina geeft 1 pagina bij de zoekterm, maar daar gaat het niet over deze foutmelding.
Via google las ik dat Excel ook de poort wil hebben en niet enkel de printernaam, dat gaf echter geen verschil.
Geprobeert zijn onder andere:
objExcel.SetActivePrinter(curPrinter);
objExcel.SetActivePrinter("Oce6410");
objExcel.SetActivePrinter("Oce6410:");
objExcel.SetActivePrinter("Oce6410 on LPT1");
objExcel.SetActivePrinter("Oce6410 on LPT1:");
Als mogelijk alternatief zou ik nog de PrintOut() methode kunnen proberen van het Sheet of Workbook object waaraan ook een printer aan mee te geven is, maar mijn voorkeur gaat uit naar de eerste methode.
Nog een oplossing zou kunnen zijn om via het Word object de default printer te wijzigen en het uiteindelijk daarmee ook weer terug te zetten, maar dat lijkt me ook niet het meest ideaal.
Heeft er toevallig iemand een idee waarom de SetActivePrinter niet lijkt te werken voor Excel, of een andere / betere oplossing voor dit probleem ?
Dit wil ik doen door te printen naar een toegevoegde lokale printer wat niet de default printer is.
Hiervoor wil ik dus tijdelijk de standaard printer wijzigen, het bestand sturen, de printer terugzetten.
Met behulp van de tutorial Use Automation to Set the Printer from an MFC Project heb ik een volgende testmethode opgezet:
C++:
Bij het aanroepen van de SetActivePrinter methode krijg ik echter steeds de melding:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| void CTestExcelDlg::testExcel( void ) { _Application objExcel; // Get the IDispatch pointer and attach it to the objExcel object. if (!objExcel.CreateDispatch("Excel.Application")) { AfxMessageBox("Couldn't get Excel object."); } // Get current default printer CString curPrinter = objExcel.GetActivePrinter(); MessageBox("Printer: " +curPrinter,"PrinterName:",MB_OK); // 'Oce6410 on LPT1:' // Set default printer back to orginal objExcel.SetActivePrinter(curPrinter); // Quit Excel objExcel.Quit(); } |
"Unable to set the ActivePrinter property", wat er op duid dat de printer niet gevonden kan worden of de eigenschap readonly is.
Dit terwijl dezelfde code wel werkt voor een MS Word object.
De MSDN pagina geeft 1 pagina bij de zoekterm, maar daar gaat het niet over deze foutmelding.
Via google las ik dat Excel ook de poort wil hebben en niet enkel de printernaam, dat gaf echter geen verschil.
Geprobeert zijn onder andere:
objExcel.SetActivePrinter(curPrinter);
objExcel.SetActivePrinter("Oce6410");
objExcel.SetActivePrinter("Oce6410:");
objExcel.SetActivePrinter("Oce6410 on LPT1");
objExcel.SetActivePrinter("Oce6410 on LPT1:");
Als mogelijk alternatief zou ik nog de PrintOut() methode kunnen proberen van het Sheet of Workbook object waaraan ook een printer aan mee te geven is, maar mijn voorkeur gaat uit naar de eerste methode.
Nog een oplossing zou kunnen zijn om via het Word object de default printer te wijzigen en het uiteindelijk daarmee ook weer terug te zetten, maar dat lijkt me ook niet het meest ideaal.
Heeft er toevallig iemand een idee waarom de SetActivePrinter niet lijkt te werken voor Excel, of een andere / betere oplossing voor dit probleem ?