ExcelFunktionen COMatePlus

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
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Re: ExcelFunktionen COMatePlus

Beitrag von mueckerich »

Hallo Falko, hallo Thomas :allright: :praise: Good Job!
Mir ist aufgefallen, dass die Konstanten für die Vertikale Ausrichtung fehlen.

Code: Alles auswählen

;-XlVAlign
#xlVAlignBottom = -4107
#xlVAlignCenter = -4108
#xlVAlignDistributed = -4117
#xlVAlignJustify = -4130
#xlVAlignTop = -4160

Einer geht noch :D

Code: Alles auswählen

Procedure XLSFunc_HCellAlignment(ExcelObject.COMateObject, Range.s, Wert.l);Set horizontal cell alignment
  ExcelObject\Invoke("Range('"+ Range +"')\Select")
  ExcelObject\SetProperty("Selection\HorizontalAlignment = " + Str(Wert))
EndProcedure

Procedure XLSFunc_VCellAlignment(ExcelObject.COMateObject, Range.s, Wert.l);Set vertical cell alignment
  ExcelObject\Invoke("Range('"+ Range +"')\Select")
  ExcelObject\SetProperty("Selection\VerticalAlignment = " + Str(Wert))
EndProcedure
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Danke dafür. Ich habe deine Codeschnipsel hinzugefügt, sowie
die Konstanten erweitert. Dabei habe ich noch einige Mehr gefunden und
ebenfalls hinzugefügt. :allright:
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: ExcelFunktionen COMatePlus

Beitrag von Kurzer »

Hallo,

ich habe das COMatePlus Include bisher nicht genutzt, sondern bin durch meine Anfrage in einem anderen Beitrag hier her gekommen (http://www.purebasic.fr/german/viewtopi ... =8&t=29215).

Nun habe ich mir das aktuelle ZIP von COMatePlus heruntergeladen und das Beispiel "Demo_Excel" mit PB 5.40LTS kompiliert. Leider treten bei der Kompilierung folgende Fehler in der Datei "COMatePlus.pbi" auf:

Code: Alles auswählen

[23:36:00] [COMPILER] Zeile 89: Native Typen können nicht mit Zeigern verwendet werden.
[23:36:59] [COMPILER] Zeile 98: Native Typen können nicht mit Zeigern verwendet werden.
[23:37:11] [COMPILER] Zeile 143: Native Typen können nicht mit Zeigern verwendet werden.
[23:37:19] [COMPILER] Zeile 1825: Falscher Parameter-Typ: ein Array wird erwartet.
Diese Nativen Typen sind:

Code: Alles auswählen

    Structure _membersCOMateClass
      *vTable.i
      iDisp.iDispatch
      containerID.i
      hWnd.i
      *eventSink._COMateEventSink
    EndStructure 
und der Fehler kann durch Austausch von .i nach .integer bei "*vTable.i" behoben werden.
Der Fehler mit dem Array betrifft die folgende Zeile:

Code: Alles auswählen

errorCode = COMatePLUS_CompileSubobjectInvokation(*hStatement, subObject, @parse())
Hier habe ich bei "@parse()" das @ entfernt und die Exceldemo kompilierte durch.

Allerdings kam nach dem Start sofort ein Messagerequester "Couldn't create the application objekt!".

Das ganze habe ich mit "Calc" von OpenOffice 4 Portable ausprobiert.
Klappt das damit überhaupt? Ich suche eigentlich nach einer Lösung von einem PB Programm aus Daten direkt in die Zellen eines gleichzeitig geöffneten Excels (MS Office) bzw. Calcs (OpenOffice) zu übertragen.

Bild
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Ich muss wegen der neuen PB5.40LTS nun erneut einen Fehler suchen.
ts-Soft hatte zwar in der Beta3 dazu eine Anpassung gemacht, die da noch mit meiner Testdatei funktionierte:

http://www.purebasic.fr/english/viewtop ... 52#p470752

Aber nun ist wieder was an PB geändert worden, aufgrunde dessen erneut Fehler
auftauchen. Sobald ich das beheben kann, tausche ich die COMatePLUS.pbi aus.


Beim ausführen dieser Procedure bekomme ich einen ungültigen Speicherzugriff.(Lesefehler auf Addresse 0)
Warum das nun so ist, was sonst gelaufen hatte, ist mir im Moment unerklärlich :(

Bei folgende Procedure hält der Debugger an: (Vermutung PB-Bug)
Procedure XLSFunc_ExcelVisible(ExcelObject.COMateObject,Wert.l);To visible Excel #True or #False
If Wert=#True
ExcelObject\SetProperty("Visible = #True")
ElseIf Wert=#False
ExcelObject\SetProperty("Visible = #False")
EndIf
EndProcedure
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: ExcelFunktionen COMatePlus

Beitrag von Kurzer »

Ist eine Datenübergabe an ein OpenOffice Tabellenblatt mit COMatePLUS denn überhaupt möglich?
Falls nicht, muss ich nach anderen Lösungen suchen.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Ich glaube nicht, das man von Openoffice den für Excel erzeugten
Code nutzen kann.

Wenn du evtl. von Microsoft den Excelreader installierst und
mit Openoffice eine XLS - Datei erzeugst, könnte es vielleicht funktionieren. Wenn ja,
dann wäre es ein kleiner Umweg über die Konvertierung der Formate.

ts-soft hatte schon mal auf so ein Link gezeigt, was ich hier mal übernehme.
Openoffice-Dokumente mittels ComatePLUS geht auch. Nur entsprechend anders, als ich das
mit Excel gemacht habe.

http://www.purebasic.fr/english/viewtop ... 47#p258147


Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Ich habe die von ts-soft angepasste COMateCom zusätzlich bei mir auf den Server gepackt für PB5.4LTS.
Leider funktioniert die mit meinem Testbeispiel aufgrund folgenden Fehlers nicht mit der released Version von PB 5.4.
debugger hat geschrieben:[22:15:04] Executable-Typ: Windows - x86 (32bit)
[22:15:04] Executable gestartet.
[22:15:09] [ERROR] ExcelFunktion.pbi (Zeile: 117)
[22:15:09] [ERROR] Ungültiger Speicherzugriff. (Lesefehler an der Adresse 0)
Mit der PB5.31 läuft diese ohne Probleme durch. Leider kann ich diesen Fehler nicht beheben wegen Unwissenheit,
ob es somit nur an der Release PB5.40LTS liegt. Die letzte PB5.4 Beta 3 hatte ich problemlos testen können.
Ich hoffe, das irgendwann das Problem beseitigt ist. Bis dahin empfehle ich allen erstmal weiterhin PB 5.31 zu nutzen.

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Nun funktioniert alles mit der aktuellsten PB 5.40LTS-Version, nachdem ich
dank Kiffi eine kleine Korrektur der COMatePLUS.pbi machen konnte. :allright:
Bild
Win11 Pro 64-Bit, PB_6.11b1
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: ExcelFunktionen COMatePlus

Beitrag von Lord »

Hallo Falko!

Wie läßt sich mit den Excel-Funktionen der Befehl "Fenster fixieren"
ausführen, so daß z.B. die erste Zeile eines Tabellenblattes nicht
nach oben wegscrollt?
Das Excel-Makro sähe so aus:

Code: Alles auswählen

Sub Makro1()
'
' Makro1 Makro
' Makro am 07.11.2015 aufgezeichnet
'

'
    Range("A2").Select
    ActiveWindow.FreezePanes = True
End Sub
Bild
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.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: ExcelFunktionen COMatePlus

Beitrag von Falko »

Ich würde das dann so bei mir einsetzen.

Code: Alles auswählen

Procedure XLSFunc_LockFirstLine(ExcelObject.COMateObject, Range.s, Wert.l=#True); Set Wert #True or #false
  ExcelObject\Invoke("Range('"+ Range +"')\Select")
  ExcelObject\SetProperty("ActiveWindow\FreezePanes = " + Str(Wert))
EndProcedure
Der Aufruf in meiner Testfile wäre dann

Code: Alles auswählen

XLSFunc_LockFirstLine(NewExcelObject, "A2")
; Debug COMate_GetLastErrorDescription()+"  XLSFunc_LockFirstLine"
und zum Deaktivieren dann:

Code: Alles auswählen

XLSFunc_LockFirstLine(NewExcelObject, "A2",#False)
; Debug COMate_GetLastErrorDescription()+"  XLSFunc_LockFirstLine"
Mit freundlichen Grüßen
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten