So erstellen und führen Sie ein Makro in LibreOffice Calc unter Linux aus

LibreOffice ist die Antwort der FOSS-Welt auf die etablierte und proprietäre Microsoft Office Suite. Es wurde von führenden Entwicklern und Mitwirkenden von Office-Produktivitätssoftware entwickelt und bietet einen vollständigen Ersatz für Microsoft Office auf mehreren Betriebssystemen.

Das LibreOffice-App-Äquivalent von Microsoft Excel heißt LibreOffice Calc. Es kommt mit einer Reihe von Funktionen und einer Excel-ähnlichen Oberfläche. Es verfügt über eine integrierte Makro-Engine zum Entwickeln und Ausführen von Makros für die Automatisierung. Es unterstützt jedoch nicht Visual Basic, aber seine eigene Sprache; LibreOffice Basic, zum Programmieren von Makros.

Die LibreOffice-Suite ist in den meisten Linux-Distributionen vorinstalliert, einschließlich Ubuntu, Debian, Fedora und CentOS.

Erstellen und Ausführen eines Makros in LibreOffice Calc

Zuerst erstellen wir ein Arbeitsblatt mit einigen Beispieldaten.

Um den Makros-Organizer zu öffnen, gehen Sie zu Extras » Makros » Makros organisieren » LibreOffice-Grundlagen. Es öffnet die LibreOffice Basic-Makros Fenster wie im Screenshot unten gezeigt.

Geben Sie einen neuen Namen für das Makro ein und klicken Sie dann auf die Schaltfläche Neu unten rechts im Fenster.

Sie sollten jetzt den Makro-Editor-Bildschirm in LibreOffice Basic sehen.

Wie wir sehen, werden manuell erstellte Makros standardmäßig unter „Meine Makros & Dialoge -> Standard -> Modul1“ erstellt.

Derzeit sind zwei Makros vorhanden: Eines ist Hauptsächlich, was ein leeres Standardmakro ist, und andere ist Prüfung, das Makro, das wir oben erstellt haben. Wir werden nun das Testmakro erweitern.

Unser Makro wird die folgenden Aufgaben erledigen:

  • Überprüfen Sie, welche Berufe alle Personen haben
  • Erstellen Sie ein neues Blatt
  • Alle Einträge für Autoren in neues Blatt verschieben

Nachfolgend unser Makro:

Sub test rem Einträge mit Beruf Writer in neues Blatt verschieben dim crs(8) als Objekt dim j als Integer dim prof als Objekt dim i als Integer dim sh als Objekt dim sh2 als Objekt sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 für i = 1 bis 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Komplette Zeile in Variable speichern Wenn prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Jetzt ein neues Blatt erstellen und diese Daten dort schreiben ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop End Sub

Lassen Sie mich Ihnen das obige Makro Abschnitt für Abschnitt erklären.

Untertest. . . End Sub

Prüfung ist der Name unseres Makros, daher wird es im Code als . bezeichnet Teiltest (sub = Unterprogramm). Auf ähnliche Weise beenden wir diesen Makrocode mit der Anweisung End Sub. Beachten Sie, dass diese Anweisungen automatisch hinzugefügt werden, wenn wir ein Makro aus dem Menü erstellen, obwohl der Benutzer den Makrocode direkt hier schreiben kann und der Name der Unterroutine als Makroname betrachtet wird.

rem 

Alle Kommentare in LibreOffice Basic beginnen mit dem Schlüsselwort rem. Eine vollständige Zeile, die mit rem beginnt, gilt als Kommentar. Eine andere Möglichkeit ist die Verwendung ' (einfaches Anführungszeichen) am Zeilenanfang.

dim crs(8) als Objekt dim j als Integer dim prof als Objekt dim i als Integer dim sh als Objekt dim sh2 als Objekt

Dies ist die Variablendeklaration in LibreOffice Basic. Die allgemeine Syntax ist schwach wie . Um ein Array zu deklarieren, verwenden Sie eine Syntax ähnlich der Variablen crs, wobei 8 die Länge des Arrays ist.

sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1

Diese Komponente verweist auf das aktuelle Dokument. In diesem Fall handelt es sich um ein Calc-Arbeitsblatt. Wir laden Sheet mit Index 0, d. h. das erste Sheet, in die Variable sh. Es gibt auch Funktionen zum Laden eines Blatts anhand des Namens.

Als nächstes rufen wir die Funktion auf getCellRangeByPosition des Objekts sh und laden Sie es in das Array crs. Zellbereich bezieht sich auf eine Gruppe von Zellen im Blatt basierend auf der Position.

Beachten Sie, dass die Argumente 0, 0 (Spalte 0, Zeile 0) bezeichnen die Startzelle des Bereichs und 3, 0 (Spalte 3, Zeile 0) bezeichnen die Endzelle des Bereichs. Daher 0, 0, 3, 0 bezieht sich auf die erste (Überschrifts-)Zeile unseres Musterblattes.

for i = 1 bis 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Komplette Zeile in Variable speichern Wenn prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Ende Wenn nächstes i

Wir benutzen ein Pro -Anweisung, um die Zeilen zu durchlaufen. Der Pro Block endet mit a nächste -Anweisung, die die Variable i am Ende jeder Iteration inkrementiert.

Als nächstes rufen wir eine Funktion auf GetCellByPosition des Objekts sch. Wir übergeben Parameter (3, ich), d. h. bei jeder Iteration wird das Objekt der Zelle in Spalte 3 und Zeile i in der Variablen prof abgerufen.

Dann verwenden wir ein Wenn -Anweisung, um zu überprüfen, ob der Wert in der Zelle prof "Writer" ist. Wenn ja, rufen wir wieder die Funktion getCellRangeByPosition, diesmal mit ich anstelle der Start- und Endreihennummer. Wir speichern es wieder im Array crs.

ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)

Zuerst erstellen wir ein neues Blatt mit Namen Schriftsteller, an Position 1, das ist die 2. Stelle, da der Index bei 0 beginnt. Dann erhalten wir ein Objekt dieses neu erstellten Blattes, damit wir die Daten von Schreibern in dieses Blatt eintragen können.

i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop

Der Mach während loop-Anweisung wird verwendet, wenn wir eine Schleife basierend auf Bedingungen durchführen möchten, im Gegensatz zu einer Schleife in einem Bereich von ganzzahligen Werten, für die use Pro wie zuvor gezeigt. Hier schleifen wir bis crs(i) ist nicht null.

Als nächstes rufen wir wieder an getCellRangeByPosition auf ähnliche Weise wie zuvor, um ein Bereichsobjekt im neuen Blatt zu erhalten.

Schließlich rufen wir zwei Funktionen auf: getDataArray die die Daten von zurückgibt crs(i), d. h. eine Datenzeile (über einen Schreiber) aus dem ersten Blatt; und wir schreiben diese Daten in den Zellbereich im neuen Blatt mit setDataArray.

Speichern Sie schließlich das Makro von Datei » Alles speichern Möglichkeit.

Um das Makro auszuführen, gehen Sie zu Extras » Makros » Makro ausführen und wählen Sie Ihr Makro aus dem Verzeichnis „My Macros“ in der Macro Selector Library aus. Drücke den Lauf -Taste, nachdem Sie einen Makronamen ausgewählt haben.

Wenn Sie das obige Makro in unserer Beispieltabelle ausführen, erhalten Sie das folgende Ergebnis.

So erstellen Sie Makros in LibreOffice. Weitere Informationen und Optionen finden Sie in der offiziellen Dokumentation.

? Beifall!