COM Objekte

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: COM Objekte

Beitrag von Josh »

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
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COM Objekte

Beitrag von Kiffi »

Josh hat geschrieben:COMate_PrepareStatement("RechnenPlus (" + Str(cnt) + ", 4)") funktioniert leider nicht.
Du warst schon nahe dran:

Code: Alles auswählen

*hStatement = COMate_PrepareStatement("RechnenPlus (" + Str(@cnt) + " As long BYREF, 4)")
Grüße ... Kiffi
Hygge
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: COM Objekte

Beitrag von Josh »

so, hab das comatezeugs korrigiert. beispiele, zeiten und text geändert.
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.
kiffi, kannst du den befehl bitte noch anschaun?

oExcelSheet\SetProperty ("Activate = 0") kann ja wohl nicht stimmen, aber
oExcelSheet\SetProperty ("Activate") funktioniert nicht
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COM Objekte

Beitrag von Kiffi »

Josh hat geschrieben:kiffi, kannst du den befehl bitte noch anschaun?
verzeitung! Hatte ich oben übersehen.

Code: Alles auswählen

oExcelSheet\Invoke ("Activate")
Grüße ... Kiffi
Hygge
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: COM Objekte

Beitrag von Josh »

Kiffi hat geschrieben:

Code: Alles auswählen

oExcelSheet\Invoke ("Activate")
danke, habs korrigiert
Benutzeravatar
Max_der_Held
Beiträge: 594
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: COM Objekte

Beitrag von Max_der_Held »

Hallo Forum,

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)
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

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_()
Benutzeravatar
Max_der_Held
Beiträge: 594
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: COM Objekte

Beitrag von Max_der_Held »

Naja, damit gehts und wohl auch besser:

http://www.purebasic.fr/german/viewtopi ... =8&t=23254

Lg
Max
Antworten