[Solved]tworzenie nowej karty i wpisanie jej nazwy do arkusz
[Solved]tworzenie nowej karty i wpisanie jej nazwy do arkusz
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.
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
Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza
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:
Mała porada:
Nie rejestruj procedur i nie ucz się na podstawie wygenerowanego kodu, bo ci tylko namiesza w głowie.
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
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
Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza
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
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
Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza
Odświeżam
Apache OpenOffice 4.1.4, Windows 8.1
Re:[Solved] tworzenie nowej karty i wpisanie jej nazwy do ar
Przekazuje moje wypociny dla potomnych, jakoś dałem radę chociaż trochę mi z tym zeszło.
Pozdrawiam czytających.
Pozdrawiam czytających.
- Załączniki
-
- tworzenie karty.ods
- (14.99 KiB) Pobrany 212 razy
Apache OpenOffice 4.1.4, Windows 8.1
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
Struktura skoroszytu posiada wbudowaną zmienną Count przechowującą liczbę arkuszy.
Możesz ją wykorzystać do nazwy zamiast komórki K1Nie 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ć...
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
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)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
Z tym co napisał Jan i z tym wstawionym przez mnie możesz stworzyć całkiem profesjonalne makra:
Będzie to szybsze, bardziej czytelne i zgodne ze standardem.
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
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
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ą.
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
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
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)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)