Seite 4 von 5

Re:

Verfasst: 28.09.2010 19:15
von Falko
Andreas_F hat geschrieben:Hat schon jemand das Super-Excel-Beispiel von Falko von DispHelper nach COMate portiert? PureDispHelper soll ja nicht mehr für neue Projekte verwendet werden, da die Weiterentwicklung eingestellt wurde.

Ich habe z.B. Probleme eine vorhandene Excel-Datei mit COMate zu öffnen. Ich weiß nicht wie ich

dhCallMethod(*obj, ".Workbooks.Open(%T)", @Datei) ; open ExcelFile

auf COMate umsetzen kann???

Bin für jede Hilfe dankbar!!!
Siehe folgenden Link
Zu ExcelFunktionen COMatePlus bitte hier auswählen. :twisted:

Re: ExcelFunktionen PureDisphelper

Verfasst: 08.04.2013 20:19
von HemSA
Hallole,
ja ich arbeite noch mit dem PureDisphelper. Das liegt daran das ich kaum Änderungen vornehme.

Habe diesbezüglich eine Frage.

Ich habe ein Excelhauptfile das immer in Benutzung ist (mit RS232 und Makro werden da immer Daten berechnet und aktualisiert). Das Auslesen von dieser Excelseite macht mein Programm.
Da natürlich der Excelhauptfile ( so nenne ich das eben mal so ) immer vom Programm A in "Betrieb" ist öffnet es mein Programm zum Auslesen der Daten natürlich immer mit READ ONLY.
Allerdings gibt es da ab und zu Probleme mit dem Programm A und dem Excelhauptfile so das dann mein Programm diesen File normal öffnet (nicht mit READ ONLY weil es dann durch irgendwelche Probleme vom Hauptprogramm in diesem Moment nicht geöffnet ist).

Da der Excelhauptfile auf dem Server liegt und von verschiedenen PC's auf diesen zugegriffen wird kann dann danach das Programm A nur noch als READ ONLY auf das Excelhauptfile zugreifen was dann Probleme macht.

Gibt es eine Möglichkeit das mein Programm diesen Excelhauptfile immer nur im READ ONLY Modus öffnet?

Zum Öffnen benutze ich diesen Teil:

Code: Alles auswählen

Procedure OpenExcelFileAllg(Allgemeintabelle.s)
  Protected *obj
  dhToggleExceptions(#True); Toggles error messages from DispHelper on or off
  *obj  = dhCreateObject("Excel.Application")
  If *obj
    dhCallMethod(*obj, ".Workbooks.Open(%T)", @Allgemeintabelle) ; ExcelFile öffnen
  EndIf
  ProcedureReturn *obj
EndProcedure
Vielen Dank im Voraus
Michael

Re: ExcelFunktionen PureDisphelper

Verfasst: 08.04.2013 20:58
von Falko
Ein OpenReadOnly in VBA für Excel sähe so aus:
Excel.Workbooks.Open(strVerzeichnis & strDatei, ReadOnly:=True)
Quasi müsstest du im Disphelper den Parameter ReadOnly:=True noch hinzufügen.
Leider habe ich mit dem Disphelper nicht mehr viel gemacht daher im Moment nur dieser Tip von
mir. Vielleicht meldet Peter sich hierzu.

Gruß,
Falko

Re: ExcelFunktionen PureDisphelper

Verfasst: 08.04.2013 21:15
von HemSA
Hallo Falko,
das heisst das ich anstelle von:

Code: Alles auswählen

dhCallMethod(*obj, ".Workbooks.Open(%T)", @Allgemeintabelle) ; ExcelFile öffnen

dann

Code: Alles auswählen

dhCallMethod(*obj, ".Workbooks.Open(%T, ReadOnly:=True)", @Allgemeintabelle) ; ExcelFile öffnen mit READ ONLY
schreiben müsste?

Michael

Re: ExcelFunktionen PureDisphelper

Verfasst: 08.04.2013 21:26
von Falko
Theoretisch müsste es so funktionieren.

Gruß,
Falko

Re: ExcelFunktionen PureDisphelper

Verfasst: 08.04.2013 21:32
von HemSA
Danke Falko,
ich werde es morgen dann mal in der Arbeit versuchen.
Ich kann es ja dann als sichtbar öffnen, da werde ich es dann sehen ob es als READ ONLY geöffnet wurde (hoffe ich jedenfalls).

Tschüssle
Michael

Re: ExcelFunktionen PureDisphelper

Verfasst: 11.04.2013 21:07
von HemSA
Hallo Falko,
es hat nicht geklappt. Das Excel wurde normal geöffnet :-( - ohne ReadOnly

Trotzdem Danke
Michael

Re: ExcelFunktionen PureDisphelper

Verfasst: 11.04.2013 22:51
von Falko
Ich weiß nun nicht, warum es nicht funktioniert. Aber wenn ich folgenden Code mit einer Test-Exceldatei
zuerst öffne habe ich erst den Kompatiblitätsmode in der Kopfzeile stehen und wenn ich das Programm nochmal
starte, welches die gleiche Datei öffnet, steht in der Kopfzeile Schreibgeschützt, also nur lesen möglich.

Code: Alles auswählen

;dhToggleExceptions(#True)
Procedure OpenExcelFileAllg(Allgemeintabelle.s)
  Protected *obj
   
  dhToggleExceptions(#True); Toggles error messages from DispHelper on or off
  *obj  = dhCreateObject("Excel.Application")
  If *obj
    dhPutValue(*obj, ".Visible = %b", #True)
    ;dhCallMethod(*obj, ".Workbooks.Open(%T)", @Allgemeintabelle) ; ExcelFile nur Lesen öffnen
    dhCallMethod(*obj, ".Workbooks.Open(%T),ReadOnly:=true", @Allgemeintabelle) ; ExcelFile nur Lesen öffnen
  EndIf
  ProcedureReturn *obj
EndProcedure

OpenExcelFileAllg("F:\Purebasic\X86\Examples\PureDispHelper\Test.xls")

dhReleaseObject(*obj)
Gruß,
Falko

Re: ExcelFunktionen PureDisphelper

Verfasst: 05.01.2014 23:03
von HemSA
Hallo Falko,
ja das ist ja das Problem.
Bei dir öffnet es das erste Mal auch normal, dann wenn du es das 2. mal öffnest ist es READ ONLY weil die Datei ja schon offen ist.

Was ich will ist das die Exceldatei schon beim ersten mal mit READ ONLY geöffnet wird egal ob es schon woanders geöffnet oder nicht geöffnet ist.

Hast du da eine Idee?
Michael

PS Alle gute wünsche für das Neue Jahr 2014

Re: ExcelFunktionen PureDisphelper

Verfasst: 06.01.2014 00:00
von Falko
Ich bin mir nicht sicher, aber ungefähr so müsste es aussehen:

Code: Alles auswählen

Procedure.l XLSFunc_OpenExcelFileReadOnly(Datei.s); Open ExcelFile
  Protected ExcelObject.COMateObject,Workbook
  ExcelObject = COMate_CreateObject("Excel.Application")
  If ExcelObject
    ExcelObject\SetProperty("Workbooks\ReadOnly = #True")
    ExcelObject\Invoke("Workbooks\Open('"+Datei+"')")
  Else
    MessageRequester("Achtung","Bitte geben Sie eine vorhandene xls-Datei mit Pfad an!")
  EndIf
  ProcedureReturn ExcelObject ;.COMateObject
EndProcedure
Morgen schaue ich mir das mal genauer an.

[Edit] Ich habe das nochmal geändert, weil das heute nicht funktionierte.

Wenn ich das wie folgt mache:

Code: Alles auswählen

Procedure.l XLSFunc_OpenExcelFileReadOnly(Datei.s); Open ExcelFile
  Protected ExcelObject.COMateObject,Workbooks
  ExcelObject = COMate_CreateObject("Excel.Application")
  If ExcelObject
     ExcelObject\Invoke("Workbooks\Open('"+Datei+"')")
     ExcelObject\SetProperty("ActiveWorkbook\ReadOnly = #True")  
     
  Else
    MessageRequester("Achtung","Bitte geben Sie eine vorhandene xls-Datei mit Pfad an!")
  EndIf
  ProcedureReturn ExcelObject ;.COMateObject
EndProcedure
bekomme ich beim Ausführen folgende Antwort zurück:
Debugger hat geschrieben:Die ReadOnly-Eigenschaft des Workbook-Objektes kann nicht festgelegt werden.
Unter VBA wird dieses ReadOnly := True beim Open-Befehl gleich mit dem Komma hinten angehängt.
Irgendwie kriege ich das mit ComateCom nicht hin, da man alles splitten muss und nicht wie in VBA
alles in einem Befehlssatz ausführen kann. Schade drum das diese Einschränkung existiert. Sonst könnte man
vieles einzuein aus VBA - Beispielen, ohne Experimentieren zu müssen, übernehmen :(.
Vielleicht hat Kiffi hierzu noch eine funktionierende Lösung, die ich dann gerne in dieser Excelfunktionslibrary
aufnehmen würde :) .

Gruß,
Falko