Seite 12 von 18
Re: ExcelFunktionen COMatePlus
Verfasst: 07.09.2015 06:51
von mueckerich
Hallo Falko, hallo Thomas

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
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
Re: ExcelFunktionen COMatePlus
Verfasst: 07.09.2015 16:43
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.

Re: ExcelFunktionen COMatePlus
Verfasst: 23.10.2015 23:53
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.

Re: ExcelFunktionen COMatePlus
Verfasst: 24.10.2015 00:38
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
Re: ExcelFunktionen COMatePlus
Verfasst: 24.10.2015 00:41
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.
Re: ExcelFunktionen COMatePlus
Verfasst: 24.10.2015 01:07
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
Re: ExcelFunktionen COMatePlus
Verfasst: 25.10.2015 23:21
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
Re: ExcelFunktionen COMatePlus
Verfasst: 28.10.2015 18:21
von Falko
Nun funktioniert alles mit der aktuellsten PB 5.40LTS-Version, nachdem ich
dank Kiffi eine kleine Korrektur der COMatePLUS.pbi machen konnte.

Re: ExcelFunktionen COMatePlus
Verfasst: 07.11.2015 18:19
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
Re: ExcelFunktionen COMatePlus
Verfasst: 08.11.2015 10:17
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