ExcelFunktionen PureDisphelper

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re:

Beitrag 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:
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag von Falko »

Theoretisch müsste es so funktionieren.

Gruß,
Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag von HemSA »

Hallo Falko,
es hat nicht geklappt. Das Excel wurde normal geöffnet :-( - ohne ReadOnly

Trotzdem Danke
Michael
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: ExcelFunktionen PureDisphelper

Beitrag 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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Antworten