Problem beim Erzeugen eines Excel-Blattes unter MFC
-
Hallo Leute,
nachdem ich nach meinem Problem in allen mir bekannten Seiten gesucht und keine behilfliche Idee gefunden habe, vesuche ich Hilfe bei Ihnen zu finden
Ich arbeite in einem Projekt, und ich muss Excel unter MFC steuern.
ich habe den code aus der Seite http://support.microsoft.com wie folgt abgeschrieben:CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; ... // Start Excel and get an Application object. if(!app.CreateDispatch("Excel.Application")) { AfxMessageBox("Couldn't start Excel and get Application object."); return; } //Get a new workbook. books = app.get_Workbooks(); :warning: [b]book = books.Add (covOptional);[/b] ...Aber die Add-Methode wurde vom Kompiler nicht akzeptiert mit der Meldung:
Add-Methode braucht 3-Parameter. Tatsächlich ist keine Add-Methode mit einem einzigen Parameter in der automatisch generierten CWorkbooks-Klasse.
Hier ist ein Auszug der Datei CWorkbooks.h, die vom Klassenassistent aus dem Typbibliothek (Mikrosoft Excel 11.0) erzeugt wurde:// CWorkbooks Wrapperklasse #import "C:\\Programme\\Gemeinsame Dateien\\Microsoft Shared\\OFFICE11\\MSO.DLL" \ rename( "RGB", "MSORGB" ) using namespace Office; #import "C:\\Programme\\Gemeinsame Dateien\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" using namespace VBIDE; #import "C:\\Programme\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \ rename("DialogBox", "ExclDialogBox") \ rename("RGB", "ExclRGB") \ rename("CopyFile", "ExclCopyFile") \ rename("ReplaceText", "ExclReplaceText") \ rename("Font", "ExcelFont") \ rename("Parameter", "ExcelParameter") \ rename("DocumentProperties", "ExcelDocumentProperties") \ rename("ExitWindows", "ExcelExitWindows") \ rename("Rectangle", "ExcelRectangle") \ rename("Arc", "ExcelArc") \ rename("Picture", "ExcelPicture") using namespace Office; class CWorkbooks : public COleDispatchDriver { public: CWorkbooks(){} // Ruft den COleDispatchDriver-Standardkonstruktor auf CWorkbooks(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {} CWorkbooks(const CWorkbooks& dispatchSrc) : COleDispatchDriver (dispatchSrc) {} // Attribute public: // Vorgänge public: // IParameters Methoden public: Application get_Application() { Application result; InvokeHelper(0x94, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL); return result; } XlCreator get_Creator() { XlCreator result; InvokeHelper(0x95, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL); return result; } LPDISPATCH get_Parent() { LPDISPATCH result; InvokeHelper(0x96, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL); return result; } [i][b]STDMETHOD(Add)(LPCTSTR Name, VARIANT& iDataType, Parameter * * RHS) { HRESULT result; static BYTE parms[] = VTS_BSTR VTS_VARIANT VTS_PDISPATCH ; InvokeHelper(0xb5, DISPATCH_METHOD, VT_HRESULT, (void*)&result, parms, Name, &iDataType, RHS); return result; }[/b][/i] long get_Count() { long result; InvokeHelper(0x76, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL); return result; } STDMETHOD(Item)(VARIANT& Index, Parameter * * RHS) { HRESULT result; static BYTE parms[] = VTS_VARIANT VTS_PDISPATCH ; InvokeHelper(0xaa, DISPATCH_METHOD, VT_HRESULT, (void*)&result, parms, &Index, RHS); return result; } Parameter get__Default(VARIANT& Index) { Parameter result; static BYTE parms[] = VTS_VARIANT ; InvokeHelper(0x0, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, parms, &Index); return result; } STDMETHOD(Delete)() { HRESULT result; InvokeHelper(0x75, DISPATCH_METHOD, VT_HRESULT, (void*)&result, NULL); return result; } STDMETHOD(_NewEnum)(LPUNKNOWN * RHS) { HRESULT result; static BYTE parms[] = VTS_PUNKNOWN ; InvokeHelper(0xfffffffc, DISPATCH_METHOD, VT_HRESULT, (void*)&result, parms, RHS); return result; } // IParameters Eigenschaften public: };Danke,
-
Wieviele Parameter das "Add" hat, hängt mit der Version von Office zusammen.
Das in der MSDN verwendete Beispiel ist garantiert für eine ältere Version erstellt worden.
Der Quellcode aus der Type-Library wurde aber anscheinend aus Office 2003 generiert (Microsoft Excel 11.0).
Da haben die Methoden z.T. andere Namen bzw. Parameter als vorher.Ich kenne mich mit der Excel-Automation nicht so aus, aber gibt es ein "books.AddOld(...)"?
Oder du musst dass Beispiel anpassen und 3 Parameter übergeben.Edit: Habe selbst mal nachgesehen, nichts mit AddOld, da hilft wohl nur anpassen.
-
Danke für die Antwort.
Das Problem ist es, dass alle Beispiele die Add-Methode (mit einem Parameter) benutzen.
ich werde mal versuchen.
-
Add Methode hat 2 Parameter!
Der lette ist der Return Wert, also Dein Workbook Zeiger.Der erste ist der bekannte Templatename.
Der zweite ist neu und gibt eine Country ID an (lcid)![id(0x000000b5), helpcontext(0x000100b5)]
HRESULT Add(
[in, optional] VARIANT Template,
[in, lcid] long lcid,
[out, retval] Workbook** RHS);Die entsprechenden Infos habe ich aus dem SDK OLEVIEW!
-
Vielen Dank,
Das Problem ist gelöst