Seite 12 von 18

Re: ExcelFunktionen COMatePlus

Verfasst: 07.09.2015 06:51
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

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. :allright:

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.

Bild

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. :allright:

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