Hallo Forum,
Ich versuche gerade diesen älteren Beitrag zum lauen zu bekommen.
Die Interfaces sind geladen mit OLE_COM_GEN,
aber immer bei
Code:
hr = CLSIDFromProgID_(@"EXCEL.APPLICATION", @ClsId)
gibts eine Fehlermeldung. (es kommt keine gültige CLSID heraus)
(Office 2010 Excel)
stimmt die Excel.application nicht? woher bekomme ich diese ID überhaupt?
Lg Max
(leider sind ein paar beispielcodes offline, z.B. die Include)
Ich verwende den code vom Anfang:
INCLUDE DateiCode:
EnableExplicit
IncludePath "Includes"
IncludeFile "excel_interfaces.pb"
Define ClsId.IID
Define *oExcelApp ._Application
Define *oExcelSheets.IWorksheets
Define *oExcelSheet ._Worksheet
Define Item.variant
Define *BStr
Define Time.l
Define cnt.l
Define hr.l
CoInitialize_ (0)
;Klassenid für Excel suchen und Objektverweis auf Application erstellen
hr = CLSIDFromProgID_(@"EXCEL.APPLICATION", @ClsId)
If hr : MessageRequester(Str(hr), "KlassenId konnte nicht ermittelt werden") : End : EndIf
hr = GetActiveObject_(@ClsId, 0, @*oExcelApp)
If hr : MessageRequester (Str(hr), "Excel muss geöffnet sein") : End : EndIf
;CoKlasse. Standardinterface auslesen
*oExcelApp\QueryInterface (?IID__Application, @*oExcelApp)
*oExcelApp\Release()
Debug "------------------------------------------------------------"
;Den Titel von Excel anzeigen
*oExcelApp\get_Caption (@*BStr)
Debug "Alter Exceltitel: " + PeekS (*BStr)
SysFreeString_ (*BStr)
;Den Titel von Excel ändern
*oExcelApp\put_Caption ("*** Titel mit früher Bindung erstellt ***")
Debug "Neuer Exceltitel wurde erstellt"
Debug "------------------------------------------------------------"
;Zeiger auf die Tabellenblätter holen
*oExcelApp\get_Worksheets (@*oExcelSheets)
;Anzahl der Tabellenblätter anzeigen
*oExcelSheets\get_Count (@cnt)
Debug "Anzahl der Tabellenblätter: " + Str(cnt)
Debug "------------------------------------------------------------"
;Zeiger auf das 2. Tabellenblatt holen
Item\vt = #VT_I4 : Item\lVal = 2
*oExcelSheets\get_Item (Item);, @*oExcelSheet)
;CoKlasse. Standardinterface auslesen
*oExcelSheet\QueryInterface (?IID__Worksheet, @*oExcelSheet)
*oExcelSheet\Release()
;Den Namen des Tabellenblattes anzeigen
*oExcelSheet\get_Name (@*BStr)
Debug "Alter Tabellenblattname: " + PeekS (*BStr)
SysFreeString_ (*BStr)
;Den Namen des Tabellenblattes ändern
*oExcelSheet\put_Name ("Name frühe Bindung")
Debug "Neuer Tabellenblattname wurde erstellt"
;Das zweite Tabellenblatt aktivieren
*oExcelSheet\Activate()
Debug "Zweites Tabellenblatt aktiviert"
Debug "------------------------------------------------------------"
;Wert aus Zelle lesen und schreiben entfällt, Excel V10 ist nicht fähig dazu.
;Spätere Versionen nicht getestet.
Debug "Zelle lesen/schreiben für frühe Bindung entfällt"
Debug "------------------------------------------------------------"
;Tabellenblattname 10000x auslesen
Time = ElapsedMilliseconds()
For cnt = 1 To 10000
*oExcelSheet\get_Name (@*BStr)
SysFreeString_ (*BStr)
Next
MessageRequester ("Tabellenblattname 10.000x lesen", "Zeit EB: " + Str (ElapsedMilliseconds() - Time ) + "ms")
Debug "------------------------------------------------------------"
;Objektverweise freigeben
*oExcelApp\Release() : *oExcelApp = 0
*oExcelSheets\Release() : *oExcelSheets = 0
*oExcelSheet\Release() : *oExcelSheet = 0
CoUninitialize_()