To jest stara wersja strony!
Spis treści
LibreOffice Basic
Opracowanie na podstawie LibreOffice w wersji 7.3.7.2.
Arkusze
Tworzenie makra
Sub NazwaMakra() Treść makra End Sub
Przykładowe nazwy zmiennych
Zmienna dokumentu
Dim oDoc As Object ' Utwórz obiekt dokumentu oDoc = ThisComponent ' Ustal dokument dla którego chcesz użyć makro
Dim oSheet As Object ' Ten arkusz jako obiekt Dim oTextCSV As Object ' Zmienna dokumentu CSV jako obiekt Dim sFile As String ' Zmienna ścieżki do pliku jako ciąg znaków </code>
Tworzenie nowego arkusza
Dim oDoc As Object ' Ten dokument jako obiekt
Dim oSheet As Object ' Ten arkusz jako obiekt
' Utwórz nowy arkusz
oDoc = ThisComponent.Sheets ' Dotyczy tego dokumentu który jest aktywny
oDoc.insertNewByName("ImportDanych", 1) ' Utworzy arkusz o nazwie "ImportDanych" za pierwszym arkuszem
Jeżeli wpiszemy oDoc = ThisComponent otrzymamy komunikat, że Nie znaleziono właściwości lub metody dla insertNewByName. Dlatego dopisujemy parametr Sheets. Dla insertNewByName pominięcie parametru (, 1) też zakończy się błędem dlatego trzeba określić, którym arkuszem będzie nowy arkusz. Jeżeli wprowadzi się wartość (, 0) nowy arkusz będzie jako pierwszy.
Tworzenie nowego arkusza o ile arkusz o podanej nazwie nie istnieje
Dim oDoc As Object ' Ten dokument jako obiekt
' Utwórz nowy arkusz jeżeli nie istnieje
oDoc = ThisComponent.Sheets
If Not oDoc.hasByName("ImportDanych") Then
oDoc.insertNewByName("ImportDanych", 0)
End If
Usunięcie arkusza
Dim oDoc As Object ' Ten dokument jako obiekt
' Usuń arkusz ImportDanych
oDoc = ThisComponent.Sheets
oDoc.removeByName("ImportDanych")
Usunięcie arkusza o ile arkusz o podanej nazwie istnieje
Dim oDoc As Object ' Ten dokument jako obiekt
oDoc = ThisComponent.Sheets
' Sprawdź, czy arkusz "Arkusz1" istnieje; jeśli tak, usuń go
If oDoc.hasByName("Arkusz1") Then
oDoc.removeByName("Arkusz1")
End If
Wyświetlenie nazw poszczególnych arkuszy występujących w dokumencie
Dim oDoc As Object ' Ten dokument jako obiekt ' Wyświetlenie nazw arkuszy z dokumentu For Each sheet In oDoc MsgBox sheet.Name Next
Wyświetlenie nazw wszystkich arkuszy ale w jednym komunikacie
Dim oDoc As Object ' Ten dokument jako obiekt ' Wyświetlenie nazw arkuszy z dokumentu MsgBox Join(oDoc.ElementNames, Chr(13))
Kolumny
Usunięcie kolumny B
Dim oSheet As Object
Dim oColumns As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
oColumns.removeByIndex(1, 1)
Usunięcie kolumny B, C i D
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
oColumns.removeByIndex(1, 3)
Usunięcie kolumn B, D i G
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
oColumns.removeByIndex(1, 1) ' Usnięcie kolumny B
oColumns.removeByIndex(2, 1) ' Usunięcie kolumny D
oColumns.removeByIndex(4, 1) ' Usunięcie kolumny G
Kolumna D jest kolumną o indeksie 2 ponieważ kolumna B została już usunięta. Kolumna G ma indeks 4 ponieważ wcześniej zostały usunięte kolumny B i D. Trzeba to uwzględnić.
Wstawienie kolumny C
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
' Wstaw pustą kolumnę C
oColumns.insertByIndex(2, 1)
Wstawienie kolumny C, D i E
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
' Wstaw pustą kolumnę C, D i E
oColumns.insertByIndex(2, 3) ' Usunięcie trzech kolumn licząc od kolumny C
Wstawienie kolumny B, D i G
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
' Wstaw pustą kolumnę B, D i G
oColumns.insertByIndex(1, 1) ' Usunięcie kolumny B
oColumns.insertByIndex(3, 1) ' Usunięcie kolumny D
oColumns.insertByIndex(6, 1) ' Usunięcie kolumny G
Numer ostatniej niepustej kolumny w pierwszym wierszu
Dim oDoc As Object
Dim oSheet As Object
Dim lastColumn As Integer
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
' Pobierz ilość kolumn w arkuszu
Dim numColumns As Integer
numColumns = oSheet.getColumns().getCount()
' Rozpocznij od ostatniej kolumny i idź w lewo, aby znaleźć pierwszą niepustą komórkę w pierwszym wierszu
lastColumn = numColumns - 1
Do While lastColumn >= 0
If oSheet.getCellByPosition(lastColumn, 0).String <> "" Then
Exit Do
End If
lastColumn = lastColumn - 1
Loop
If lastColumn >= 0 Then
MsgBox "Numer ostatniej kolumny z niepustą komórką w pierwszym wierszu: " & lastColumn + 1
Else
MsgBox "W pierwszym wierszu nie ma niepustych komórek."
End If
W kolumnie J Zamiana pustych komórek na cyfrę 0
Dim oDoc As Object
Dim oSheet As Object
Dim lastRow As Long
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
' Utwórz kursor, który obejmuje cały arkusz
oCursor = oSheet.createCursor()
' Przejdź do ostatniej niepustej komórki w kolumnie A (lub innej kolumnie według potrzeb)
oCursor.gotoEndOfUsedArea(True)
' Pobierz numer ostatniego wiersza
lastRow = oCursor.RangeAddress.EndRow
' W przypadku pominięcia nagłówka tabeli usuń komentarz poniższej linii lastRow = lastRow + 1
For i = 1 To lastRow -1 ' Rozpoczynamy od wiersza 2
oCell = oSheet.getCellByPosition(9, i) ' Kolumna J to 9
' Jeśli komórka jest pusta, ustaw jej wartość na 0
If oCell.getString() = "" Then
oCell.setValue(0)
End If
Next i
Wiersze
Wstawienie pustego wiersza nr 4
Dim oDoc As Object
Dim oSheet As Object
Dim oRows As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oRows = oSheet.getRows()
' Wstaw jeden pusty wiersz. Trzeci licząc od zera.
oRows.insertByIndex(3, 1)
Wstawienie dwóch pustych wierszy 4 i 5
Dim oDoc As Object
Dim oSheet As Object
Dim oRows As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oRows = oSheet.getRows()
' Wstaw dwa puste wiersze. Będzie to trzeci i czwarty wiersz licząc od zera.
' Biorąc pod uwagę numerację wierszy po lewej stronie arkusza czwarty i piąty wiersz.
oRows.insertByIndex(3, 2)
Wstaw wiersze 4, 5 i 7
Dim oDoc As Object
Dim oSheet As Object
Dim oRows As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oRows = oSheet.getRows()
' Wstaw wiersz 3, 4 i 7 licząc od zera.
oRows.insertByIndex(3, 2)
oRows.insertByIndex(6, 1)
Numer ostatniego niepustego wiersza w kolumnie A
Dim oDoc As Object
Dim oSheet As Object
Dim lastRow As Long
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
' Rozpocznij od ostatniego wiersza i idź w górę, aby znaleźć pierwszy niepusty wiersz
lastRow = oSheet.Rows.Count
Do While lastRow > 0
If oSheet.getCellByPosition(0, lastRow - 1).String <> "" Then
Exit Do
End If
lastRow = lastRow - 1
Loop
If lastRow > 0 Then
MsgBox "Numer ostatniego niepustego wiersza w kolumnie A: " & lastRow
Else
MsgBox "Kolumna A jest pusta."
End If
Numer ostatniego wiersza w tabeli
Dim oDoc As Object
Dim oSheet As Object
Dim oCursor As Object
Dim lastRow As Integer
' Dotyczy dokumentu Calc
oDoc = ThisComponent.Sheets
' Pobierz arkusz ImportDanych
oSheet = oDoc.getByName("ImportDanych")
' Utwórz kursor, który obejmuje cały arkusz
oCursor = oSheet.createCursor()
' Przejdź do ostatniej niepustej komórki w kolumnie A (lub innej kolumnie według potrzeb)
oCursor.gotoEndOfUsedArea(True)
' Pobierz numer ostatniego wiersza
lastRow = oCursor.RangeAddress.EndRow
' W przypadku pominięcia nagłówka tabeli usuń komentarz poniższej linii
' lastRow = lastRow + 1
MsgBox "Numer ostatniego wiersza w tabeli: " & lastRow
Pogrubienie wiersza 1 i optymalizacja szerokości kolumn
Dim oDoc As Object
Dim oSheet As Object
Dim oRange As Object
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
oRange = oSheet.getCellRangeByName("A1:F1") ' Wybranie zakresu komórek
oRange.CharWeight = com.sun.star.awt.FontWeight.BOLD ' Pogrubienie czcionki wiersza
oRange.Columns.OptimalWidth = True ' Dobranie optymalnej szerokości kolumn na podstawie treści zawartych w zakresie komórek
Odszukanie i zamiana treści w pierwszym wierszu arkusza przydatne do zmiany nazw kolumn
Dim oDoc As Object
Dim oSheet As Object
Dim oRow As Object
Dim oCell As Object
Dim SearchString As String
Dim ReplaceString As String
' Ustaw wartości zmiennych SearchString i ReplaceString
SearchString = "ns0:" ' Tekst szukany
ReplaceString = "" ' Tutaj możesz wpisać tekst, który ma zastąpić SearchString
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
' Pobierz wiersz 1
oRow = oSheet.Rows.getByIndex(0)
' Przejdź przez każdą komórkę w wierszu 1 i dokonaj zamiany
For i = 0 To oSheet.getColumns().getCount() - 1
oCell = oSheet.getCellByPosition(i, 0)
oCell.String = Replace(oCell.String, SearchString, ReplaceString)
Next i
Usunięcie wszystkich wierszy z arkusza poza wierszem nagłówka
Dim oDoc As Object
Dim oSheet As Object
Dim oCursor As Object
Dim lastRow As Long
' Dotyczy dokumentu Calc
oDoc = ThisComponent.Sheets
' Pobierz arkusz ImportDanych
oSheet = oDoc.getByName("ImportDanych")
' Utwórz kursor, który obejmuje cały arkusz
oCursor = oSheet.createCursor()
' Przejdź do ostatniej niepustej komórki w kolumnie A (lub innej kolumnie według potrzeb)
oCursor.gotoEndOfUsedArea(True)
' Pobierz numer ostatniego wiersza
lastRow = oCursor.RangeAddress.EndRow
' Usuń wiersze (od 2 do lastRow. Pierwszy wiersz to 0)
oSheet.Rows.removeByIndex(1, lastRow)
Komórki
Wstawienie treści do kmórki A1
Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object
Dim TextToInsert As String
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oCell = oSheet.getCellByPosition(0, 0) ' Kolumna A to 0, wiersz 1 to 0
TextToInsert = "Twoja treść tutaj"
' Wstaw treść do komórki
oCell.String = TextToInsert
Wstawienie liczby do kmórki A1
Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object
Dim NumberToInsert As Double ' Typ danych Double oznacza liczby zmiennoprzecinkowe
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
oCell = oSheet.getCellByPosition(0, 0) ' Kolumna A to 0, wiersz 1 to 0
NumberToInsert = 123.45
' Wstaw liczbę do komórki
oCell.Value = NumberToInsert
Wstawienie funkcji do komórki
Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object
Dim FunctionFormula As String
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
FunctionFormula = "=SUMA(B1:B10)" ' Przykład: suma wartości w zakresie od B1 do B10
' Wstaw funkcję do komórki
oCell.Formula = FunctionFormula
Kopiowanie funkcji z komórki do innej komórki
Dim oDoc As Object
Dim oSheet As Object
Dim SourceCell As Object
Dim TargetCell As Object
oDoc = ThisComponent.Sheets
' Wybranie arkusza o nazwie ImportDanych
oSheet = oDoc.getByName("ImportDanych")
' Określ źródłową komórkę, z której chcesz skopiować funkcję (np. komórka A1)
SourceCell = oSheet.getCellByPosition(0, 0) ' Kolumna A to 0, wiersz 1 to 0
' Określ docelową komórkę, do której chcesz wkleić funkcję (np. komórka B1)
TargetCell = oSheet.getCellByPosition(1, 0) ' Kolumna B to 1, wiersz 1 to 0
' Kopiuj funkcję z komórki źródłowej do komórki docelowej
TargetCell.Formula = SourceCell.Formula
