Opracowanie na podstawie LibreOffice w wersji 7.3.7.2.
Sub NazwaMakra() Treść makra End Sub
Dim oDoc As Object ' Utwórz obiekt arkuszy oDoc = ThisComponent.Sheets ' Ustal arkusze dla którego chcesz użyć makro
Dim oSheet As Object ' Utwórz obiekt arkusza
oSheet = ThisComponent.Sheets.getByName("NazwaArkusza") ' Przypisanie arkusza do obiektu
W powyższym przykładzie można by zastosować składnię:
oSheet = oDoc.getByName("NazwaArkusza")
Jakiego sposobu użyjemy zależy od nas. Z jednej strony powyższy wpis może zmniejszyć wielkość kodu ale z drugiej strony mimo tego, że kod będzie mniejszy to może utrudnić jego zrozumienie. Trzeba podejść elastycznie co w danym przypadku będzie wygodniejsze, lepsze, zasadne itd.
Dim oTextCSV As Object ' Zmienna dokumentu CSV jako obiekt Dim sFile As String ' Zmienna ścieżki do pliku jako ciąg znaków
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.
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
Dim oDoc As Object ' Ten dokument jako obiekt
' Usuń arkusz ImportDanych
oDoc = ThisComponent.Sheets
oDoc.removeByName("ImportDanych")
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
Dim oDoc As Object oDoc = ThisComponent.Sheets For Each Sheet In oDoc MsgBox Sheet.Name Next
Dim oDoc As Object oDoc = ThisComponent.Sheets MsgBox Join(oDoc.ElementNames, Chr(13))
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)
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)
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ć.
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)
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
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
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
' Pobranie dokumentu i arkusza o nazwie "ImportDanych"
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
' Ukrycie kolumn B (1), D (3) i G (6)
oColumns.getByIndex(1).IsVisible = False ' Ukrycie kolumny B
oColumns.getByIndex(3).IsVisible = False ' Ukrycie kolumny D
oColumns.getByIndex(6).IsVisible = False ' Ukrycie kolumny G
Dim oDoc As Object
Dim oSheet As Object
Dim oColumns As Object
Dim i As Integer
' Pobranie dokumentu i arkusza o nazwie "ImportDanych"
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
oColumns = oSheet.getColumns()
' Odkrycie wszystkich kolumn
For i = 0 To oColumns.getCount() - 1
oColumns.getByIndex(i).IsVisible = True
Next i
Generalnie chyba prościej zaznaczyć cały arkusz w lewym górnym rogu i odkryć kolumny z menu podręcznego myszki.
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
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
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)
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)
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)
Dim oDoc As Object
Dim oSheet As Object
Dim oRows As Object
' Pobranie dokumentu i arkusza o nazwie "ImportDanych"
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
oRows = oSheet.getRows()
' Ukrycie wierszy 2 (1), 5 (4) i 10 (9) (indeksy zaczynają się od 0)
oRows.getByIndex(1).IsVisible = False ' Ukrycie wiersza 2
oRows.getByIndex(4).IsVisible = False ' Ukrycie wiersza 5
oRows.getByIndex(9).IsVisible = False ' Ukrycie wiersza 10
Dim oDoc As Object
Dim oSheet As Object
Dim oRows As Object
Dim i As Long ' Zmieniono na Long, aby obsłużyć duże zakresy
' Pobranie dokumentu i arkusza o nazwie "ImportDanych"
oDoc = ThisComponent.Sheets
oSheet = oDoc.getByName("ImportDanych")
oRows = oSheet.getRows()
' Odkrycie wszystkich wierszy
For i = 0 To oRows.getCount() - 1
oRows.getByIndex(i).IsVisible = True
Next i
Z uwagi na dużą ilość dostępnych wierszy lepiej odkrywać określone wiersze. Makro jako ciekawostka. Mało praktyczne. Może zjeść zasoby.
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
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
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
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
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)
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
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
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
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