COMatePLUS Unterschied zwischen Sheet und Worksheet

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von jacdelad »

Hallo,
ich quäle mich immer noch mit COMatePLUS rum und brauche Hilfe:
Ich kann jetzt schon die Anzahl der Arbeitsblätter und deren Namen auslesen. Leider komme ich trotzdem nicht weiter: Ich will jetzt das Arbeitsblatt wechseln bzw. auslesen, welches beim Laden der Datei aktiv ist (das wird ja in der Datei gespeichert). Welche Befehle muss ich dafür verwenden?
Außerdem hab ich die Befehle XLSFunc_ChangeToWorksheet und XLSFunc_ChangeToSheet gefunden, was ist der Unterschied bzw. was genau bewirken sie?
Außerdem, gibt es noch eine andere, verständlichere Dokumentation außer die: https://docs.microsoft.com/en-us/office ... activecell oder halt eine, die das für PureBasicianer erklärt?
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
pfnuesu
Beiträge: 8
Registriert: 01.05.2022 16:10

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von pfnuesu »

Hallo jacdelad
Ich will jetzt das Arbeitsblatt wechseln bzw. auslesen, welches beim Laden der Datei aktiv ist (das wird ja in der Datei gespeichert).
Ich schreibe dafür das jeweils aktive Blatt immer gleich in eine Variable:
WS1 = WorkBook\GetObjectProperty("ActiveSheet")

oder beim Hinzufügen eines Blattes
WS2 = Workbook\GetObjectProperty("Sheets\Add")

Dann kann ich den Inhalt der Blätter direkt ansteuern:
WS1\SetProperty("Cells(1,1) = 'WS1'")
WS2\SetProperty("Cells(1,1) = 'WS2'")
Außerdem hab ich die Befehle XLSFunc_ChangeToWorksheet und XLSFunc_ChangeToSheet gefunden, was ist der Unterschied bzw. was genau bewirken sie?
Ein Worksheet ist ein Tabellenblatt während ein Sheet alle arten von Blättern in der Excel-Arbeitsmappe sein kann (z.B. Tabellenblatt, Diagramm, Makroblatt)
Außerdem, gibt es noch eine andere, verständlichere Dokumentation außer die: https://docs.microsoft.com/en-us/office ... activecell oder halt eine, die das für PureBasicianer erklärt?
Im Prinzip alles was mit Excel und VBA zu tun hat. Einzig die Übersetzung in COMatePlus-Konforme Formatierung ist dann noch die Herausforderung.

Gruss aus Bern,
Pfnuesu
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von jacdelad »

Hallo Pfnesu,
und wieder mal bist du es, der mir helfen kann. <) Vielen Dank erstmal dafür.
Ich versuche wirklich mich richtig darin zu vertiefen, aber es ist doch noch schwerer als WinAPI (womit ich jetzt halbwegs klarkomme, solange keine besonders exotischen Strukturen verwendet werden).

In meinem Projekt soll der Benutzer das passende Worksheet (soviel hab ich schon gelernt) auswählen können. Dazu liste ich alle vorhandenen in einer Combobox auf (das geht schon mal) und dasjenige, das bereits als aktiv gespeichert wurde, soll vorab angewählt sein. MyExcelObject\GetObjectProperty("ActiveSheet") gibt aber eine ID, ein Handle oder sowas in der Art zurück, da kann ich nicht rausfinden, welches Worksheet wirklich gerade aktiv ist. Weißt du was ich meine?

Eine Übersetzung ist für mich nicht zwingend notwendig, ich muss nur das System verstehen. Vielleicht komme ich noch dahinter.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
pfnuesu
Beiträge: 8
Registriert: 01.05.2022 16:10

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von pfnuesu »

Hallo jacdelad

Gerne.

Vielleicht glaube ich zu verstehen, was du meinst.

Da du die Worksheets in einer Combobox auflisten kannst, hast Du die Namen-Eigenschaft bereits entdeckt.

Code: Alles auswählen

     
For i = 1 To MyExcelObject\GetIntegerProperty("Sheets\Count")
        Debug MyExcelObject\GetStringProperty("Sheets(" + i + ")\Name")
Next i
Den Namen des aktiven Blattes kannst Du auf die gleiche Weise auslesen:

Code: Alles auswählen

Debug MyExcelObject\GetStringProperty("ActiveSheet\Name")
Da sich Worksheets nicht nur über den Namen sondern auch über den Index ansteuern lassen, kannst du ziemlich ähnlich auch die Blattnummer auslesen:

Code: Alles auswählen

Debug MyExcelObject\GetIntegerProperty("ActiveSheet\Index") 
Anwählen kannst du die Blätter dann ebenfalls via Namen oder via Index (wie im oberen Beispiel mit der Auflistung der Blattnamen im For/Next-Loop).

Code: Alles auswählen

MyExcelObject\Invoke("Sheets('Tabelle3')\Activate")   ;GetGadgetItemText()
MyExcelObject\Invoke("Sheets(5)\Activate")            ;GetGadgetState() + 1 
Gruss aus Bern
Pfnuesu


(edit: Fipptehler)
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von jacdelad »

Ah, jaja, genau das ist es. Ich glaube auch ich steige langsam hinter das System. Ich suche nur noch nach einer guten Anleitung, aber da finde ich bestimmt noch was.

Ich bin überrascht, du bist erst seit kurzem angemeldet, hast nur 5 Posts und scheinst hierfür schon ein totaler Experte zu sein. :D
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von jacdelad »

Ich arbeite übrigens mit Falcos Include, die eigentlich funktioniert...aber nur im fertigen Compilat. Mit Debugger stürzt das Programm immer ab.

Code: Alles auswählen

XIncludeFile "ExcelFunktion.pbi"
Global MyExcelObject.COMateObject
MyExcelObject=XLSFunc_OpenExcelFile("MyExcelFile.xlsx")
;Hier kommt das Programm nie an
Debug MyExcelObject
Debug XLSFunc_CloseExcelAll(MyExcelObject)
Die Zeile

Code: Alles auswählen

result = iDisp\Invoke(dispID, ?IID_NULL, #LOCALE_USER_DEFAULT, invokeType, dp, *ret, excep, @uiArgErr)
in

Code: Alles auswählen

Procedure.i COMateClass_INTERNAL_InvokeiDispatch(*this._membersCOMateClass, invokeType, returnType, *ret.VARIANT_CFIX, iDisp.iDispatch, subObjectIndex, *statement._COMatePLUSStatement)
verursacht den Fehler "Procedure Stack has been corrupted." Seltsamerweise kann ich es nach dem Compilieren normal starten und alles funktioniert. Weißt du da Rat? Wenn ich den Debugger ausschalte geht es.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
pfnuesu
Beiträge: 8
Registriert: 01.05.2022 16:10

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von pfnuesu »

Ich bin überrascht, du bist erst seit kurzem angemeldet, hast nur 5 Posts und scheinst hierfür schon ein totaler Experte zu sein.
Naja, ich versuche seit gut 20 Jahren, mir und andern am Arbeitsplatz das Leben mit Excel-Automatisierungen zu vereinfachen. Teilweise mit reinem VBA, dann eigenständige Programme in Powerbasic und seit kurzem nun in Purebasic.

Falkos Include benutze ich "nur" als Codereferenz, habe aber jetzt mal testweise Dein Beispiel bei mir laufen lassen:

Code: Alles auswählen

EnableExplicit

IncludePath "..\..\..\Plugins\COMatePLUS\xls-Funktionen"
XIncludeFile "ExcelFunktion.pbi"
Debug "1 " + COMate_GetLastErrorDescription()

Global MyExcelObject.COMateObject
Debug "2 "  + COMate_GetLastErrorDescription()

MyExcelObject=XLSFunc_OpenExcelFile("MyExcelFile.xlsx")
Debug "3"  + COMate_GetLastErrorDescription()
;Hier kommt das Programm nie an

Debug "4 " + MyExcelObject
Debug "5 " + XLSFunc_CloseExcelAll(MyExcelObject)
Leider (oder für mich zum Glück?) läuft's bei mir durch, ich kriege von allen 5 Debugs einen Eintrag.

Getestet hab ich's mir 5.73 x86, 5.73 x64, 6.0 x64 (Beta 5) und 6.0 C Backend (Beta 5)

..
..

Das war ohne Compiler-Options. Ich habe noch etwas im Forum gestöbert und habe einen Beitrag vom 2015 mit einer "Stack has been corrupted"-Meldung gesehen. Dort ist der Fehler erst aufgetaucht, als der User den Purifier aktiviert hat. Und tatsächlich, sobald ich das mache, erhalte ich ebenfalls die Fehlermeldung.

Demnach:
Ohne Purifier laufen bei mir alle oben benannten Versionen durch
Mit aktiviertem Purifier laufen die x64 Versionen (5.73 sowie 6.0) nicht (ausser C Backend, diese Version läuft auch)
Und: Die Ursache scheint nicht an Falkos Include zu liegen sondern in COMate; der Fehler tritt auch schon beim mitgelieferten "Demo_Excel.pb" auf.


Gemäss dem erwähnten Beitrag könnte es etwas mit alloziertem Speicher zu tun haben. Dies überschreitet dann allerdings wieder meine Kenntnisse.
https://www.purebasic.fr/english/viewto ... =7&t=63925
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von jacdelad »

Oh ok. Danke für's Untersuchen. Ich glaube damit kann ich leben, es funktioniert ja an sich.

Dann nachträglich herzlich willkommen von mir, du wirst es nicht bereuen. PureBasic ist super!
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
pfnuesu
Beiträge: 8
Registriert: 01.05.2022 16:10

Re: COMatePLUS Unterschied zwischen Sheet und Worksheet

Beitrag von pfnuesu »

Vielen Dank - ich werd's mir hier bequem einrichten :)
Antworten