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.
oDoc = ThisComponent
Nie znaleziono właściwości lub metody dla insertNewByName
Sheets
insertNewByName
(, 1)
(, 0)
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ć.
D
2
B
G
4
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 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 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