Seite 1 von 1

[Erledigt] Frage zu Excel mit COMatePlus

Verfasst: 12.02.2012 14:40
von Pure_Beginner
Hallo Gemeinde,

wieder einmal ein Excel Problen.
Leider schaffe ich es nicht den Fehler abzufangen wenn die Exceldatei nicht gefunden wir.

Code: Alles auswählen

Define.COMateObject ExcelTwenty5, WorkBook
  ExcelTwenty5 = COMate_CreateObject("Excel.Application")
If ExcelTwenty5
  If ExcelTwenty5\GetObjectProperty("Workbooks\Open('"+str_Dateipfad+"')")                ;öffnen von vorhandener Tabelle Twenty 5.xlsx
    If  ExcelTwenty5\SetProperty("Visible = #True") = #S_OK
    EndIf
  EndIf
Else
  MessageRequester("Achtung","Bitte geben Sie eine vorhandene xlsx-Datei mit Pfad an!")
EndIf
Leider bekomme ich dann die COMate Fehlermeldung

Code: Alles auswählen

Procedure.i COMateClass_INTERNAL_InvokeiDispatch(*this._membersCOMateClass, invokeType, returnType, *ret.VARIANT, iDisp.iDispatch, subObjectIndex, *statement._COMatePLUSStatement)
  Protected result.i = #S_OK
  Protected dispID, dp.DISPPARAMS, dispIDNamed, excep.EXCEPINFO, uiArgErr
  ;First task is to retrieve the dispID corresponding to the method/property.
    result = iDisp\GetIDsOfNames(?IID_NULL, @*statement\methodName[subObjectIndex], 1, #LOCALE_USER_DEFAULT, @dispID)
  If SUCCEEDED(result)
    ;Now prepare to call the method/property.
      dispidNamed  = #DISPID_PROPERTYPUT
      If *statement\numArgs[subObjectIndex]
        dp\rgvarg = *statement\ptrVarArgs[subObjectIndex] + (#COMate_MAXNUMVARIANTARGS - *statement\numArgs[subObjectIndex])*SizeOf(VARIANT)
      EndIf
      dp\cargs = *statement\numArgs[subObjectIndex]
      If invokeType & (#DISPATCH_PROPERTYPUT | #DISPATCH_PROPERTYPUTREF)
        dp\cNamedArgs = 1
        dp\rgdispidNamedArgs = @dispidNamed
      EndIf
    ;Call the method/property.
      result = iDisp\Invoke(dispID, ?IID_NULL, #LOCALE_USER_DEFAULT, invokeType, dp, *ret, excep, @uiArgErr)
    If result = #DISP_E_EXCEPTION
      ;Has the automation server deferred from filling in the EXCEPINFO structure?
        If excep\pfnDeferredFillIn
          excep\pfnDeferredFillIn(excep)
        EndIf
        If excep\bstrSource
   ;       SysFreeString_(excep\bstrSource)
        EndIf          
        If excep\bstrDescription
          CompilerIf Defined(COMATE_NOERRORREPORTING, #PB_Constant)=0
            COMateClass_INTERNAL_SetError(*this, result,  #True, PeekS(excep\bstrDescription, -1, #PB_Unicode))
          CompilerEndIf
          SysFreeString_(excep\bstrDescription)
        Else
          CompilerIf Defined(COMATE_NOERRORREPORTING, #PB_Constant)=0
            COMateClass_INTERNAL_SetError(*this, result,  #True)
          CompilerEndIf
        EndIf          
        If excep\bstrHelpFile
          SysFreeString_(excep\bstrHelpFile)
        EndIf          
    EndIf
  EndIf
  ProcedureReturn result
EndProcedure
in der Zeile

Code: Alles auswählen

COMateClass_INTERNAL_SetError(*this, result,  #True, PeekS(excep\bstrDescription, -1, #PB_Unicode))
.

Ferner ist es mir nicht möglich zu verhindern das Excel im Hintergrung geöfnet bleibt ( mit Taskmannager sichbar).
Ich weis leider nicht wie ich die Variable Saved = True an Excel weiter reiche.

Dieses Projekt habe ich in Visual Basic längst realisiert, aber Purbasic biete so viele möglichkeiten, das ich gefallen daran gefunden habe und gerne mehr verstehen würde.

Für euere Hilfe wäre ich sehr dankbar.


PS.
giebt es ein kommerzielles Tool, das ich in Purbasic einbinden kann um es mit Excel zu verbinden (für Dummis) ?

Re: Frage zu Excel mit COMatePlus

Verfasst: 12.02.2012 14:46
von Kiffi
Pure_Beginner hat geschrieben:Leider schaffe ich es nicht den Fehler abzufangen wenn die Exceldatei nicht gefunden wir.

Code: Alles auswählen

If FileSize(str_Dateipfad)=-1
  MessageRequester("Achtung","Bitte geben Sie eine vorhandene xlsx-Datei mit Pfad an!")
EndIf
Grüße ... Kiffi

Re: Frage zu Excel mit COMatePlus

Verfasst: 12.02.2012 15:37
von Pure_Beginner
@ Kiffi

Wie immer super schnell und einfach. (verstehe sogar ich)

Hab wieder wie immer viel gelernt.
Besten Dank. :allright:

Ps.
Weist du vieleicht auch wie ich die Excels im Taskmannager kille ?

Re: Frage zu Excel mit COMatePlus

Verfasst: 12.02.2012 16:11
von Kiffi
Pure_Beginner hat geschrieben:Weist du vieleicht auch wie ich die Excels im Taskmannager kille ?
brauchst Du nicht. Einfach in Deinem Code

Code: Alles auswählen

ExcelTwenty5\Invoke("Quit()")
ExcelTwenty5\Release()
ausführen, wenn Du das Objekt nicht mehr benötigst.

Grüße ... Kiffi

Re: Frage zu Excel mit COMatePlus

Verfasst: 12.02.2012 16:20
von Pure_Beginner
@Kiffi

Ok.
Nochmals Danke

Re: Frage zu Excel mit COMatePlus

Verfasst: 12.02.2012 20:08
von Falko
Ich weiß nicht, ob du hier schon nachgeschaut hast.
Aber vielleicht kannst du dir hier auch einige
Sachen von herausziehen.

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

Gruß,
Falko