Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base: 179706
(http://support.microsoft.com/kb/179706/EN-US/
)
How to use MFC to automate Excel and create and format a new workbook
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
In diesem Artikel wird gezeigt, wie Sie Microsoft Excel mithilfe der Microsoft Foundation Class-Bibliothek (MFC) Version 4.2 automatisieren. (Die MFC-Bibliothek wird mit Microsoft Visual C++ 5.0 und 6.0 installiert.)
Es wird beschrieben, wie Sie mithilfe der OLE-Automatisierung eine Microsoft Excel-Arbeitsmappe erstellen bzw. formatieren. Außerdem werden verschiedene Methoden und Eigenschaften (aus der Microsoft Excel-Typbibliothek) zum Hinzufügen von Daten zum Arbeitsblatt sowie zum Formatieren des Arbeitsblatts vorgestellt.
Hinweise zur Automatisierung von Microsoft Excel 2000 und 2002
Der Beispielcode in diesem Artikel verwendet aus der Excel 97-Objektbibliothek (Excel 8.olb) generierte Klassenwrapper. Leicht abgeändert kann dieser Code auf einen Automatisierungsclient angewendet werden, der Klassenwrapper für Excel 2000 (Excel9.olb) oder Excel 2002 (Excel.olb) verwendet. Weitere Informationen zur Verwendung des in diesem Artikel beschriebenen Beispielcodes mit der Microsoft Excel 2000- oder Microsoft Excel 2002-Typbibliothek finden Sie im folgenden Artikel der Microsoft Knowledge Base:
224925
(http://support.microsoft.com/kb/224925/DE/
)
INFO: Typenbibliotheken für Büro können sich mit neuer Version ändern
Sie können den Code in diesem Artikel in die Meldungsbehandlungsfunktion eines Ereignisses kopieren, das in einer CPP-Datei der MFC-Bibliothek definiert ist. Der Beispielcode soll die Verwendung der IDispatch-Schnittstellen und Memberfunktionen veranschaulichen, die in der Typbibliothek "Excel8.olb" definiert sind. Der hauptsächliche Nutzen dieses Artikels besteht darin, dass Sie den Code im Beispiel genauer kennen lernen und verstehen können, damit Sie den Beispielcode abändern oder eigenen Code erstellen können, um Microsoft Excel 97 mit MFC zu automatisieren.
Führen Sie die Schritte 1 bis 12 der Anleitung im folgenden Microsoft Knowledge Base-Artikel aus, um ein Beispielprojekt zu erstellen, das die in der Typbibliothek "Excel8.olb" definierten IDispatch-Schnittstellen und Memberfunktionen verwendet:
178749
(http://support.microsoft.com/kb/178749/DE/
)
Erstellen eines Automatisierungsprojekts mit MFC und einer Typenbibliothek
Fügen Sie am Anfang der Datei "AutoProjectDlg.cpp" die folgende Zeile ein:
#include "excel8.h"
Fügen Sie den folgenden Code zur Funktion "CAutoProjectDlg::OnRun()" in der Datei "AutoProjectDLG.cpp" hinzu:
// Commonly used OLE variants.
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
Font font;
Range cols;
// Start Excel and get Application object.
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn't start Excel and get Application object.");
return;
}
//Get a new workbook.
books = app.GetWorkbooks();
book = books.Add (covOptional);
//Get the first sheet.
sheets =book.GetSheets();
sheet = sheets.GetItem(COleVariant((short)1));
//Fill cells A1, B1, C1, and D1 one cell at a time with "headers".
range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
range.SetValue(COleVariant("First Name"));
range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
range.SetValue(COleVariant("Last Name"));
range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
range.SetValue(COleVariant("Full Name"));
range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
range.SetValue(COleVariant("Salary"));
//Format A1:D1 as bold, vertical alignment = center.
range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
font = range.GetFont();
font.SetBold(covTrue);
range.SetVerticalAlignment(
COleVariant((short)-4108)); //xlVAlignCenter = -4108
//Fill A2:B6 with an array of values (First & Last Names).
{
COleSafeArray saRet;
DWORD numElements[]={5,2}; //5x2 element array
saRet.Create(VT_BSTR, 2, numElements);
//Fill the 5x2 SafeArray with the following data:
// John Smith
// Tom Brown
// Sue Thomas
// Jane Jones
// Adam Johnson
FillSafeArray(L"John", 0, 0, &saRet);
FillSafeArray(L"Smith", 0, 1, &saRet);
FillSafeArray(L"Tom", 1, 0, &saRet);
FillSafeArray(L"Brown", 1, 1, &saRet);
FillSafeArray(L"Sue", 2, 0, &saRet);
FillSafeArray(L"Thomas", 2, 1, &saRet);
FillSafeArray(L"Jane", 3, 0, &saRet);
FillSafeArray(L"Jones", 3, 1, &saRet);
FillSafeArray(L"Adam", 4, 0, &saRet);
FillSafeArray(L"Johnson", 4, 1, &saRet);
range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));
range.SetValue(COleVariant(saRet));
saRet.Detach();
}
//Fill C2:C6 with a relative formula (=A2 & " " & B2).
range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));
range.SetFormula(COleVariant("=A2 & \" \" & B2"));
//Fill D2:D6 with a formula(=RAND()*100000) and apply a number
//format.
range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));
range.SetFormula(COleVariant("=RAND()*100000"));
range.SetNumberFormat(COleVariant("$0.00"));
//AutoFit columns A:D.
range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
cols = range.GetEntireColumn();
cols.AutoFit();
//Manipulate a variable number of columns for Quarterly Sales Data.
{
short NumQtrs;
CString msg;
Range resizedrange;
Interior interior;
Borders borders;
//Determine how many quarters to display data for.
for(NumQtrs=1;NumQtrs<=3;NumQtrs++)
{
msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);
if(AfxMessageBox(msg,MB_YESNO)==IDYES)
{
break;
}
}
msg.Format("Displaying data for %d quarters.", NumQtrs);
AfxMessageBox(msg);
//Starting at E1, fill headers for the number of columns selected.
range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));
resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
resizedrange.SetFormula(
COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));
//Change the Orientation and WrapText properties for the headers.
resizedrange.SetOrientation(COleVariant((short)38));
resizedrange.SetWrapText(covTrue);
//Fill the interior color of the headers.
interior = resizedrange.GetInterior();
interior.SetColorIndex(COleVariant((short)36));
//Fill the columns with a formula and apply a number format.
range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));
resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
resizedrange.SetFormula(COleVariant("=RAND()*100"));
resizedrange.SetNumberFormat(COleVariant("$0.00"));
//Apply borders to the Sales data and headers.
range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));
resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));
borders = resizedrange.GetBorders();
borders.SetWeight(COleVariant((short)2)); //xlThin = 2
//Add a Totals formula for the Quarterly sales data and apply a
//border.
range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));
resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));
borders = resizedrange.GetBorders();
{
Border bottomborder;
bottomborder = borders.GetItem((long)9);
bottomborder.SetLineStyle(
COleVariant((short)-4119)); //xlDouble = -4119
bottomborder.SetWeight(
COleVariant((short)4)); //xlThick = 4
}
}
//Make the application visible and give the user control of
//Microsoft Excel.
app.SetVisible(TRUE);
app.SetUserControl(TRUE);
Fügen Sie die folgende Funktion an einer beliebigen Stelle vor der Funktion "CAutoProjectDlg::OnRun()" zur Datei "AutoProjectDLG.cpp" hinzu:
Führen Sie die Anwendung in Developer Studio aus. Klicken Sie auf die Schaltfläche Ausführen, wenn das Dialogfeld angezeigt wird (der Beispielcode erstellt eine dialogfeldbasierte Anwendung).
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Bitte geben Sie Ihr Feedback zu diesem Artikel ab
Hat dieser Artikel bei der Lösung Ihres Problems geholfen?
Ja
Nein
Ich weiß nicht
Waren die Informationen für Ihr Problem relevant?
Ja
Nein
Wie könnte man den Artikelinhalt verbessern?
Hinweis: Leider können wir keine Kommentare persönlich beantworten.
Danke! Dieses Feedback hilft uns dabei, die Supportartikel weiter zu verbessern. Weitere Informationen finden Sie auf der Hilfe und Support-Startseite.