PureBoard
http://forums.purebasic.com/german/

COM Objekte
http://forums.purebasic.com/german/viewtopic.php?f=9&t=22518
Seite 2 von 2

Autor:  Josh [ 20.05.2010 14:04 ]
Betreff des Beitrags:  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

Autor:  Kiffi [ 20.05.2010 15:00 ]
Betreff des Beitrags:  Re: COM Objekte

Josh hat geschrieben:
COMate_PrepareStatement("RechnenPlus (" + Str(cnt) + ", 4)") funktioniert leider nicht.

Du warst schon nahe dran:
Code:
*hStatement = COMate_PrepareStatement("RechnenPlus (" + Str(@cnt) + " As long BYREF, 4)")


Grüße ... Kiffi

Autor:  Josh [ 20.05.2010 16:13 ]
Betreff des Beitrags:  Re: COM Objekte

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

Autor:  Kiffi [ 20.05.2010 17:24 ]
Betreff des Beitrags:  Re: COM Objekte

Josh hat geschrieben:
kiffi, kannst du den befehl bitte noch anschaun?

verzeitung! Hatte ich oben übersehen.
Code:
oExcelSheet\Invoke ("Activate")


Grüße ... Kiffi

Autor:  Josh [ 20.05.2010 17:30 ]
Betreff des Beitrags:  Re: COM Objekte

Kiffi hat geschrieben:
Code:
oExcelSheet\Invoke ("Activate")

danke, habs korrigiert

Autor:  Max_der_Held [ 02.08.2012 10:07 ]
Betreff des Beitrags:  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
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 Datei
Code:
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_()

Autor:  Max_der_Held [ 02.08.2012 11:54 ]
Betreff des Beitrags:  Re: COM Objekte

Naja, damit gehts und wohl auch besser:

viewtopic.php?f=8&t=23254

Lg
Max

Seite 2 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/