LibreOffice Calc Schnittstellenzugriff per Makro

Für alles, was nicht mit fischertechnik zu tun hat.
Miscellaneous - everything that has nothing to do with ft
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Benutzeravatar
H.A.R.R.Y.
Beiträge: 1083
Registriert: 01 Okt 2012, 08:38
Wohnort: Westpfalz

LibreOffice Calc Schnittstellenzugriff per Makro

Beitrag von H.A.R.R.Y. » 20 Okt 2021, 15:29

Hallo zusammen,

mir ist klar, LibreOffice ist **nicht** Excel! Nichtsdestotrotz haben sich die Entwickler offensichtlich sehr viel Mühe gegeben die Unterschiede zwischen Excel und Calc gering zu halten, viele Excel-Makros laufen einfach weiter als wäre nichts gewesen. Seit kurzem versuche ich Excel los zu werden und bin absolut neu was das LibreOffice Calc betrifft. OS = Win10. Das ist der Hintergrund.

Nun gibt es für Excel-Makros die Möglichkeit direkt auf die WinAPI zuzugreifen, zum Beispiel COM-Ports oder gar HID. Leider laufen die Excel-Makros beim Calc gar nicht (es hagelt mir nicht bekannte Fehlermeldungen und die Netzsuche bringt keine brauchbaren Funde).
  • Kennt sich wer mit dem LibreOffice aus und hat wenigstens mal eine COM-Schnittstelle geöffnet bekommen?
Etwas Tutorial (anständige Doku, Codebeispiel, ...) wäre mir willkommen. In den offiziellen Calc-Handbüchern ist allerdings nichts in der Richtung zu finden.

Mein Code zur COM-Bedienung für Excel stammt von

Code: Alles auswählen

'-------------------------------------------------------------------------------
' modCOMM - Written by: David M. Hitchner
'
' This VB module is a collection of routines to perform serial port I/O without
' using the Microsoft Comm Control component.  This module uses the Windows API
' to perform the overlapped I/O operations necessary for serial communications.
'
' The routine can handle up to 4 serial ports which are identified with a
' Port ID.
'
' All routines (with the exception of CommRead and CommWrite) return an error
' code or 0 if no error occurs.  The routine CommGetError can be used to get
' the complete error message.
'-------------------------------------------------------------------------------
und geht nach dem Vorgeplänkel genau so los:

Code: Alles auswählen

Sub ComTest()

    Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
    Dim lngStatus As Long
    Dim strError  As String
    Dim strData   As String
    Dim lngSize As Integer
    Dim nowTick As Long
    Dim endTick As Long
    Dim reply As String
    Dim replyLength As Integer
    
    intPortID = Cells(2, 3).Value
    
    ' Initialize Communications
    lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), _
        "baud=19200 parity=N data=8 stop=1")
    If lngStatus <> 0 Then
        ' Handle error.
        lngStatus = CommGetError(strError)
        MsgBox "COM Error: " & strError
    Else
    [...]
läuft mit Excel weiter, nötigt dem Calc aber nur ein

Code: Alles auswählen

LibreOffice 7.2.1.2
COM Error: Error (423): CommOpen - LastDllError
ab. Dabei kommt der "Error (423): CommOpen - LastDllError" über CommGetError () von der WinAPI (vermute ich). Ich bin ratlos.

TeraTerm bedient die serielle Schnittstelle (hier COM4) problemfrei, das Gerät am anderen Ende des USB antwortet auch sehr brav.

Beim Experiment mit der HID-Klasse gibt es noch ganz anderen Ärger mit unstimmigen Tydefinitionen, das würde ich aber erst im zweiten Schritt angehen wollen. Erstmal soll die COM laufen.
  • Ist das LibreOffice 7.2.1.2 Calc schon so weit, geht das (noch) gar nicht oder fehlt nur meinem recht frischen PC da etwas?
Grüße
H.A.R.R.Y.
[42] SURVIVE - or die trying

Benutzeravatar
steffalk
ft:pedia-Herausgeber
Beiträge: 1792
Registriert: 01 Nov 2010, 16:41
Wohnort: Karlsruhe
Kontaktdaten:

Re: LibreOffice Calc Schnittstellenzugriff per Makro

Beitrag von steffalk » 20 Okt 2021, 19:04

Tach auch!

Falls LibreOffice das Win32-API nicht direkt nutzen kann, kann es vielleicht COM-Objekte erzeugen? Dann bräuchtest Du "nur" eine COM-Komponente für serielle Schnittstellen. Sowas hier vielleicht: https://www.activexperts.com/files/seri ... manual.htm

Gruß,
Stefan

Antworten