Een typebibliotheek voor Office Automation gebruiken vanuit Visual C++.NET
Samenvatting
In dit artikel wordt beschreven hoe u een Visual C++ .NET-project bouwt dat fungeert als een Automation-client voor toepassingen die compatibel zijn met het Component Object Model (COM). Het voorbeeld in dit artikel maakt gebruik van Microsoft Foundation Classes (MFC) met klasse wrappers voor een Office-onderdeel.
Meer informatie
De volgende stappen laten zien hoe u een eenvoudige Automation-client bouwt. Er zijn drie belangrijke stappen voor deze procedure:
- Maak de Automation-client.
- Voeg code toe om Microsoft Excel te automatiseren.
- Voer de Automation-client uit.
U kunt de eerste stap (De Automation-client maken) gebruiken om een nieuwe Automation-client te maken, ongeacht de Automation-server die u gebruikt. De tweede stap (Code toevoegen aan Microsoft Excel automatiseren) is specifiek voor de Automation-server.
Een Automation-client maken
Start Microsoft Visual Studio .NET. Klik in het menu Bestand op Nieuw en klik vervolgens op Project. Selecteer de MFC-toepassing in de typen Visual C++ Projects en geef het project de naam AutoProject.
Wanneer de wizard MFC-toepassing wordt weergegeven, klikt u op Toepassingstype, stelt u het toepassingstype in op Dialoogvenster gebaseerd en klikt u vervolgens op Voltooien.
Wijzig het dialoogvenster IDD_AUTOPROJECT_DIALOG als volgt:
- Verwijder het besturingselement Label (IDC_STATIC) en de knop Annuleren (IDCANCEL).
- Wijzig de id van de OKbutton in 'IDRUN' en het bijschrift in 'Uitvoeren'.
Maak als volgt klasse-wrappers van de typebibliotheek voor de Automation-server:
Klik in Solution Explorer met de rechtermuisknop op AutoProject en klik vervolgens op Klasse toevoegen.
Klik op MFC-klasse uit Typelib en klik vervolgens op Openen.
Klik op Een klasse toevoegen vanuit: Register en zoek de geregistreerde typebibliotheek voor uw Automation-server.
Selecteer voor dit voorbeeld 'Microsoft Excel 10.0 Type Library' voor Microsoft ExcelXP of 'Microsoft Excel 9.0 Type Library' voor Microsoft Excel 2000.
Selecteer de interface(s) die u nodig hebt in de lijst en klik vervolgens op het symbool groter dan (>) om ze toe te voegen aan de lijst met interfaces waarvoor MFC wrappers maakt. Klik op Voltooien wanneer u alle interfaces hebt toegevoegd.
Voor dit voorbeeld hebt u alleen de _Application-interface nodig.
Belangrijk Als er veel interfaces zijn in de typebibliotheek die u hebt gekozen, selecteert u alleen de interfaces die u wilt gebruiken, omdat MFC een afzonderlijk headerbestand genereert voor elke geselecteerde interface. Door uw interfaceselecties te minimaliseren, kunt u onnodige overhead voorkomen tijdens het genereren en compileren van bestanden.
Als u de COM-servicesbibliotheek wilt laden en inschakelen voor de functie CAutoProjectApp::InitInstance, voegt u de volgende code toe:
if(!AfxOleInit()) // Your addition starts here. { AfxMessageBox("Cannot initialize COM dll"); return FALSE; // End of your addition. } AfxEnableControlContainer();
Voeg een include-instructie toe voor elk headerbestand dat wordt gegenereerd op basis van de interfaces in de typebibliotheek van de Automation-server. Voeg de instructies toe na de include-instructie voor Stdafx.h bovenaan AutoProjectDlg.cpp.
Voeg voor dit voorbeeld een include toe voor het headerbestand CApplication.h, dat wordt gegenereerd voor de _Application interface:
#include "stdafx.h" #include "CApplication.h"
Code toevoegen om Microsoft Excel te automatiseren
Klik in het dialoogvenster IDD_AUTOPROJECT_DIALOG met de rechtermuisknop op Uitvoeren en klik vervolgens in de vervolgkeuzelijst op Gebeurtenishandler toevoegen. Selecteer in de wizard Gebeurtenishandler het BN_CLICKED berichttype en klik vervolgens op Toevoegen en bewerken. Voeg de volgende code toe om Excel in de handler te automatiseren:
void CAutoProjectDlg::OnBnClickedRun()
{
CApplication app; // app is the Excel _Application object
// Start Excel and get Application object.
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Cannot start Excel and get Application object.");
return;
}
else
{
//Make the application visible and give the user control of
//Microsoft Excel.
app.put_Visible(TRUE);
app.put_UserControl(TRUE);
}
}
De Automation-client uitvoeren
Druk op F5 om de Automation-client te bouwen en uit te voeren. Wanneer het dialoogvenster wordt weergegeven, klikt u op Uitvoeren. De Automation-client start Excel en maakt de toepassing zichtbaar. U ziet dat Excel actief blijft, zelfs wanneer de Automation-client wordt beëindigd, omdat de gebruiker de controle over de toepassing heeft gekregen.
Aanvullende notities
Nadat u klassen uit een typebibliotheek aan uw project hebt toegevoegd, merkt u mogelijk dat ze worden weergegeven in de klassenweergave van uw project. In de klasseweergave kunt u dubbelklikken op een klasse om de methoden van die klasse te zien en vervolgens dubbelklikt u op de methode om de definitie van die functie weer te geven in het implementatiebestand van de MFC-wrapper. U kunt de definitie van een lidfunctie controleren als u een retourtype wilt controleren of als u een implementatie van een functie moet wijzigen.
Hoewel de eerdere stappen laten zien hoe u Microsoft Excel kunt automatiseren, kunt u dezelfde ideeën toepassen om andere toepassingen te automatiseren. De volgende lijst bevat de bestandsnamen voor typebibliotheken van andere Microsoft Office-toepassingen:
| Toepassing| Typebibliotheek| |---|---| | Microsoft Access 97| Msacc8.olb| | Microsoft Jet Database 3.5|DAO350.dll| | Microsoft Binder 97| Msbdr8.olb| | Microsoft Excel 97| Excel8.olb| | Microsoft Graph 97| Graph8.olb| | Microsoft Office 97|Mso97.dll| | Microsoft Outlook 97| Msoutl97.olb| | Microsoft PowerPoint 97| Msppt8.olb| | Microsoft Word 97| Msword8.olb| ||| | Microsoft Access 2000| Msacc9.olb| | Microsoft Jet Database 3.51|DAO360.dll| | Microsoft Binder 2000| Msbdr9.olb| | Microsoft Excel 2000| Excel9.olb| | Microsoft Graph 2000| Graph9.olb| | Microsoft Office 2000|Mso9.dll| | Microsoft Outlook 2000| Msoutl9.olb| | Microsoft PowerPoint 2000| Msppt9.olb| | Microsoft Word 2000| Msword9.olb | ||| | Microsoft Access 2002| Msacc.olb| | Microsoft Excel 2002|Excel.exe| | Microsoft Graph 2002|Graph.exe| | Microsoft Office 2002|MSO.dll| | Microsoft Outlook 2002| MSOutl.olb| | Microsoft PowerPoint 2002| MSPpt.olb| | Microsoft Word 2002| MSWord.olb| ||| | Microsoft Office Access 2003| Msacc.olb| | Microsoft Office Excel 2003|Excel.exe| | Microsoft Office Graph 2003|Graph.exe| | Microsoft Office 2003|MSO.dll| | Microsoft Office Outlook 2003| MSOutl.olb| | Microsoft Office PowerPoint 2003| MSPpt.olb| | Microsoft Office Word 2003| MSWord.olb| ||| | Microsoft Office Access 2007| Msacc.olb| | Microsoft Office Excel 2007|Excel.exe| | Microsoft Office Graph 2007|Graph.exe| | Microsoft Office 2007|MSO.dll| | Microsoft Office Outlook 2007| MSOutl.olb| | Microsoft Office PowerPoint 2007| MSPpt.olb| | Microsoft Office Word 2007| MSWord.olb| Opmerking De standaardlocatie voor dit type bibliotheken is:
| Office-versie| Pad| |---|---| | Office 97| C:\Program Files\Microsoft Office\Office| | Office 2000| C:\Program Files\Microsoft Office\Office| | Office XP| C:\Program Files\Microsoft Office\Office10| | Office 2003| C:\Program Files\Microsoft Office\Office11| |2007 Office| C:\Program Files\Microsoft Office\Office12| De standaardlocatie voor Dao350.dll en Dao360.dll is C:\Program Files\Common Files\Microsoft Shared\Dao.