[Erledigt] Frage zu Excel mit COMatePlus
Verfasst: 12.02.2012 14:40
Hallo Gemeinde,
wieder einmal ein Excel Problen.
Leider schaffe ich es nicht den Fehler abzufangen wenn die Exceldatei nicht gefunden wir.
Leider bekomme ich dann die COMate Fehlermeldung
in der Zeile .
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) ?
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
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
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) ?