COM Objekte
Re: COM Objekte
ey danke für den tipp kiffi.
wollte deine änderungen gerade in meine beispiele einbauen und die zeiten entsprechend anpassen. jetzt bin ich aber bei einem anderen problem. wie sieht das mit dem PrepareStatement aus, wenn der entsprechende befehl statt
*oRechnen\RechnenPlus (5, 4)
*oRechnen\RechnenPlus (cnt, 4)
lautet. ich werde dann alle beispiele auf cnt umbauen. es wird ja keiner eine million mal exakt das gleiche ausführen. sorry, hab mich vorher nicht so mit comate beschäftigt. COMate_PrepareStatement("RechnenPlus (" + Str(cnt) + ", 4)") funktioniert leider nicht.
kannst du mir auch noch sagen, wie in meinem beispiel 3, zeile 45 der richtige comate-befehl lautet? so wie ich es geschrieben habe funktioniert es zwar, ich glaube aber nicht, dass es so richtig ist.
thxs
josh
wollte deine änderungen gerade in meine beispiele einbauen und die zeiten entsprechend anpassen. jetzt bin ich aber bei einem anderen problem. wie sieht das mit dem PrepareStatement aus, wenn der entsprechende befehl statt
*oRechnen\RechnenPlus (5, 4)
*oRechnen\RechnenPlus (cnt, 4)
lautet. ich werde dann alle beispiele auf cnt umbauen. es wird ja keiner eine million mal exakt das gleiche ausführen. sorry, hab mich vorher nicht so mit comate beschäftigt. COMate_PrepareStatement("RechnenPlus (" + Str(cnt) + ", 4)") funktioniert leider nicht.
kannst du mir auch noch sagen, wie in meinem beispiel 3, zeile 45 der richtige comate-befehl lautet? so wie ich es geschrieben habe funktioniert es zwar, ich glaube aber nicht, dass es so richtig ist.
thxs
josh
Re: COM Objekte
Du warst schon nahe dran:Josh hat geschrieben:COMate_PrepareStatement("RechnenPlus (" + Str(cnt) + ", 4)") funktioniert leider nicht.
Code: Alles auswählen
*hStatement = COMate_PrepareStatement("RechnenPlus (" + Str(@cnt) + " As long BYREF, 4)")
Hygge
Re: COM Objekte
so, hab das comatezeugs korrigiert. beispiele, zeiten und text geändert.
oExcelSheet\SetProperty ("Activate = 0") kann ja wohl nicht stimmen, aber
oExcelSheet\SetProperty ("Activate") funktioniert nicht
kiffi, kannst du den befehl bitte noch anschaun?Josh hat geschrieben:kannst du mir auch noch sagen, wie in meinem beispiel 3, zeile 45 der richtige comate-befehl lautet? so wie ich es geschrieben habe funktioniert es zwar, ich glaube aber nicht, dass es so richtig ist.
oExcelSheet\SetProperty ("Activate = 0") kann ja wohl nicht stimmen, aber
oExcelSheet\SetProperty ("Activate") funktioniert nicht
Re: COM Objekte
verzeitung! Hatte ich oben übersehen.Josh hat geschrieben:kiffi, kannst du den befehl bitte noch anschaun?
Code: Alles auswählen
oExcelSheet\Invoke ("Activate")
Hygge
Re: COM Objekte
danke, habs korrigiertKiffi hat geschrieben:Code: Alles auswählen
oExcelSheet\Invoke ("Activate")
- Max_der_Held
- Beiträge: 594
- Registriert: 18.04.2006 17:01
- Wohnort: Bavaria
- Kontaktdaten:
Re: COM Objekte
Hallo Forum,
Ich versuche gerade diesen älteren Beitrag zum lauen zu bekommen.
Die Interfaces sind geladen mit OLE_COM_GEN,
aber immer bei
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 Datei
Ich versuche gerade diesen älteren Beitrag zum lauen zu bekommen.
Die Interfaces sind geladen mit OLE_COM_GEN,
aber immer bei
Code: Alles auswählen
hr = CLSIDFromProgID_(@"EXCEL.APPLICATION", @ClsId)
(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 Datei
Code: Alles auswählen
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_()
- Max_der_Held
- Beiträge: 594
- Registriert: 18.04.2006 17:01
- Wohnort: Bavaria
- Kontaktdaten:
Re: COM Objekte
Naja, damit gehts und wohl auch besser:
http://www.purebasic.fr/german/viewtopi ... =8&t=23254
Lg
Max
http://www.purebasic.fr/german/viewtopi ... =8&t=23254
Lg
Max