[Solved]tworzenie nowej karty i wpisanie jej nazwy do arkusz

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

[Solved]tworzenie nowej karty i wpisanie jej nazwy do arkusz

Post autor: kturendyk »

Witam ponownie
Ciąg dalszy mojej walki z arkuszami.
Prosił bym o pomoc bo walczę już kilka dni a efektów brak, dopiero się uczę pisać makra.
Chciałbym aby makro tworzyło nowy arkusz na końcu (z przycisku który będzie na wszystkich kartach już utworzonych) o nazwie "arkusz N" gdzie N będzie numerem kolejnym.
Dodatkowo po utworzeniu ma wpisać nazwę arkusza na koniec listy tworzonej w pierwszym arkuszu( w moim przypadku "główna").
Proszę o wyrozumiałość, człowiek się całe życie uczy a ja już oczopląsu dostaje od czytania a nic mi z tego na razie nie wychodzi.
Załączniki
tworzenie karty.ods
(8.8 KiB) Pobrany 201 razy
Ostatnio zmieniony ndz lut 14, 2016 11:44 pm przez kturendyk, łącznie zmieniany 1 raz.
Apache OpenOffice 4.1.4, Windows 8.1
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza

Post autor: belstar »

Dziś nie specjalnie mam czas żeby ci pomóc, może jutro (dotyczy to też twojego poprzedniego postu), a w tej chwili polecam lekturę https://wiki.openoffice.org/wiki/Docume ... readsheets.
Wstawienie arkusza:

Kod: Zaznacz cały

Sub WstawArkusz
	Dim Doc As Object
	Dim Sheet As Object
	 
	Doc = ThisComponent
	 
	If Doc.Sheets.hasByName("MySheet") Then
	   Sheet = Doc.Sheets.getByName("MySheet")
	Else
	   Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
	   Doc.Sheets.insertByName("MySheet", Sheet)
	End If
End Sub
Mała porada:
Nie rejestruj procedur i nie ucz się na podstawie wygenerowanego kodu, bo ci tylko namiesza w głowie.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza

Post autor: kturendyk »

Dziękuję za zainteresowanie.
Z moim angielskim trochę ciężko ale sobie radzę plus translator.
Faktycznie próbowałem rejestrować i coś z tego poskładać ale wychodzi z tego lipa.
Jestem cierpliwy i poczekam - jakby dało radę z moimi problemami było by super to by mi przyspieszyło moje prace.
Jeszcze raz z góry dziękuję

(edit)

Moje wypociny prawie działają pozbierałem kilka makr i je trochę pomieszałem.
Jeszcze nie wiem jak w takiej formie zrobić żeby nazwa arkusza w zakładkach miała nazwę np:"arkusz"
Jeżeli można i ktoś by miał czas to prosiłbym o poprawki tych moich wypocin bo troszkę tam namieszałem.
Jak zrobić żeby liczba w kolumnie K się zwiększała po dodaniu arkusza a nie przed.
Dziękuję za cierpliwość i pozdrawiam
Załączniki
tworzenie karty.ods
(14.13 KiB) Pobrany 200 razy
Apache OpenOffice 4.1.4, Windows 8.1
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza

Post autor: kturendyk »

Odświeżam :)
Apache OpenOffice 4.1.4, Windows 8.1
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re:[Solved] tworzenie nowej karty i wpisanie jej nazwy do ar

Post autor: kturendyk »

Przekazuje moje wypociny dla potomnych, jakoś dałem radę chociaż trochę mi z tym zeszło.
Pozdrawiam czytających.
Załączniki
tworzenie karty.ods
(14.99 KiB) Pobrany 212 razy
Apache OpenOffice 4.1.4, Windows 8.1
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar

Post autor: Jan_J »

Struktura skoroszytu posiada wbudowaną zmienną Count przechowującą liczbę arkuszy.
Możesz ją wykorzystać do nazwy zamiast komórki K1

Kod: Zaznacz cały

sub wstawArkuszNaKoniecSkoroszytu()
  doc = thisComponent
  arkusze = doc.Sheets
  nark = arkusze.Count
  nazwa = "Arkusz" & (nark+1)
  arkusze.InsertNewByName(nazwa, nark)
  bazowy = "spis"
  arkusze.getByName(bazowy).getCellByPosition(0, nark).setString(nazwa)
end sub
Nie ucz się z nagranych makr; raczej studiuj przykłady API, np. z materiałów Andrew Pitonyaka.

Trochę odwróciłem logikę. Wszystko co ważne dzieje się wewnątrz procedury, w arkuszu lądują jedynie wyniki. Użyłem getByName(bazowy) zamiast getByIndex(0) dlatego, że kolejność zależy od przeciągania zakładek przez użytkownika. Co prawda nazwę też łatwo zmienić...
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar

Post autor: belstar »

Z tym co napisał Jan i z tym wstawionym przez mnie możesz stworzyć całkiem profesjonalne makra:

Kod: Zaznacz cały

Sub ZnajdzPierwszaPusta
	Zeszyt = ThisComponent.Sheets.getByName("arkusz1")
	Komorki = Zeszyt.getCellRangeByName("L12:L300")
	Puste_w_kol_L = Komorki.queryEmptyCells()
	Pierwsza_Pusta = Puste_w_kol_L.getByIndex(0)
	PustyZakres = Pierwsza_Pusta.RangeAddress
	Print "L" & PustyZakres.StartRow
End Sub

Sub Sort
	Dim oSheet
	Dim oRange
	Dim oSortFields(0) as new com.sun.star.util.SortField
	Dim oSortDesc(1) as new com.sun.star.beans.PropertyValue
		oSheet = ThisComponent.Sheets(0)
		oRange = oSheet.getCellRangeByName("J12:L22")
		oSortFields(0).Field = 0'wedłog jakiej kolumny
		oSortFields(0).SortAscending = true'rosnąco czy malejąco
		oSortFields(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
		oSortDesc(0).Name = "SortFields"
		oSortDesc(0).Value = oSortFields()
		oSortDesc(1).Name = "ContainsHeader"'czy ma nagłówek
    	oSortDesc(1).Value = False
		oRange.Sort(oSortDesc())
End Sub
Będzie to szybsze, bardziej czytelne i zgodne ze standardem.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar

Post autor: kturendyk »

Witam,
Dopasowałem to do swojego arkusza i działa.Jednak można to inaczej zrobić, sam bym sobie nie poradził jeszcze wiele nauki przedemną.
Wielkie podziękowania dla Jan_J i belstar.
Poprawiony arkusz wstawiam dla potomnych niech też się czegoś nauczą.
Załączniki
tworzenie karty.ods
(14.42 KiB) Pobrany 230 razy
Apache OpenOffice 4.1.4, Windows 8.1
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar

Post autor: Jan_J »

W moim kawałku są jeszcze braki: brak zabezpieczenia przypadku, kiedy arkusz o zaproponowanej nazwie już istnieje oraz przypadku, kiedy arkusz ze spisem ma inną nazwę (ściślej: nie istnieje arkusz o nazwie pamiętanej w bazowy). Te okoliczności nie wystąpią, o ile plansze będą tworzone jedynie makrem i nie będą zarządzane w inny sposób, ale nie da się wykluczyć innych ingerencji, a te mogą spowodować błąd.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ