Kalendarz - wybór daty do wpisania do komórki
Kalendarz - wybór daty do wpisania do komórki
Witam,
Miałem (w zasadzie mam nadal) piękny dodatek (załączam go) Kalendarz, który przez wiele lat służył mi pod MS OFFICE.
Uwarunkowania spowodowały, że muszę się przesiąść na OO i czuję wyraźną lukę, pustkę.
Szukałem na tym forum i w necie podobnych dodatków ale nic nie znalazłem, są kalendarze ale 100% to formatki (terminarze itp).
Zdecydowałem się napisać aby dowiedzieć się wśród specjalistów czy może ktoś widział taki dodatek jak mój ale pod OO.
Ewentualnie może ktoś potrafi "przekonwertować" ten kalendarz z MS na OO?
Nie chcę być nieskromny ale gdy znalazłem ten mój kalendarz pod MS i pokazałem go w firmie to był szał. Okazało się, że 90% osób było w podobnej sytuacji jak ja - klepało daty z palca i irytowało ich to maksymalnie.
Fajnie jakby się udało coś z moim problemem zrobić
Pozdrawiam
Andrzej
Miałem (w zasadzie mam nadal) piękny dodatek (załączam go) Kalendarz, który przez wiele lat służył mi pod MS OFFICE.
Uwarunkowania spowodowały, że muszę się przesiąść na OO i czuję wyraźną lukę, pustkę.
Szukałem na tym forum i w necie podobnych dodatków ale nic nie znalazłem, są kalendarze ale 100% to formatki (terminarze itp).
Zdecydowałem się napisać aby dowiedzieć się wśród specjalistów czy może ktoś widział taki dodatek jak mój ale pod OO.
Ewentualnie może ktoś potrafi "przekonwertować" ten kalendarz z MS na OO?
Nie chcę być nieskromny ale gdy znalazłem ten mój kalendarz pod MS i pokazałem go w firmie to był szał. Okazało się, że 90% osób było w podobnej sytuacji jak ja - klepało daty z palca i irytowało ich to maksymalnie.
Fajnie jakby się udało coś z moim problemem zrobić
Pozdrawiam
Andrzej
- Załączniki
-
- jckalendarz.zip
- (47.36 KiB) Pobrany 3988 razy
Open office 3.1 na Windows XP
Re: Kalendarz - wybór daty do wpisania do komórki
Witaj na forum,
nie zdołałem jeszcze obejrzeć Twojego dodatku w akcji. Zrobię to przy najbliższej okazji dostępu do Excela. Przeglądanie kodu pod LO nie daje pełnej orientacji.
W OO/LO istnieje wizualny komponent wyboru daty. Odpowiedni element API jest zarejestrowany pod nazwą com.sun.star.form.component.DateField, patrz http://www.openoffice.org/api/docs/comm ... Field.html. Można go wbudowywać w formularze dialogowe. Rozumiem, że o to by chodziło, i o sensowne sprzęgnięcie tego dialogu z bieżącą komórką.
nie zdołałem jeszcze obejrzeć Twojego dodatku w akcji. Zrobię to przy najbliższej okazji dostępu do Excela. Przeglądanie kodu pod LO nie daje pełnej orientacji.
W OO/LO istnieje wizualny komponent wyboru daty. Odpowiedni element API jest zarejestrowany pod nazwą com.sun.star.form.component.DateField, patrz http://www.openoffice.org/api/docs/comm ... Field.html. Można go wbudowywać w formularze dialogowe. Rozumiem, że o to by chodziło, i o sensowne sprzęgnięcie tego dialogu z bieżącą komórką.
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: Kalendarz - wybór daty do wpisania do komórki
Czy ten plik na pewno jest poprawny? Poprosiłem kolegę, który ma betę MS Office 2013, aby wyeksportował go do ODS (Office 2013 obsługuje normę zapisu ISO ODF 1.2) i przy próbie otwarcia dokumentu wyskoczył błąd:
Potem sugeruje konwersje z XLA do XLAM, co nic nie zmienia. XLAM również wypluwa taki błąd.
Kod: Zaznacz cały
[Window Title]
C:\jckalendarz.xlam
[Content]
Wystąpiły problemy z przesłaniem polecenia do programu.
[OK]
Standardowa diagnostyka rozwiązuje 90% problemów typu "wcześniej działało, ale już nie działa".
Przepis na LibreOffice
Uzyskałeś pomoc? Poinformuj innych o sprawdzonym rozwiązaniu i podziękuj. Dodaj [SOLVED] w tytule.
Przepis na LibreOffice
Uzyskałeś pomoc? Poinformuj innych o sprawdzonym rozwiązaniu i podziękuj. Dodaj [SOLVED] w tytule.
Re: Kalendarz - wybór daty do wpisania do komórki
@jan: sorka ale jestem totalnie lamerski w temacie OO i nie jakiś super w temacie VBA. cała moja praca w excel to raczej formuły itp. Więc nie wiem w ogóle jak miałbym zrobić to co piszesz.
Nie mogę wkleić obrazka ale mój kalendarz działał tak, że siedział sobie na pasku na górze. Stawałeś na komórce, klikałeś na niego i wyskakiwał applet z kalendarzem. wybierałeś datę mychą i kopiowała ci się do komórki a applet kalendarza znikał.
Co do pliku to ten, który załączyłem nazywał się jckalendarz.xla (taki zipowałem) - nie wiem skąd się wzięło to m na końcu.
ten xla bez problemu chodzi bo na stanowisku obok ma go zainstalowany mój kolega (MS office 2003)
Nie mogę wkleić obrazka ale mój kalendarz działał tak, że siedział sobie na pasku na górze. Stawałeś na komórce, klikałeś na niego i wyskakiwał applet z kalendarzem. wybierałeś datę mychą i kopiowała ci się do komórki a applet kalendarza znikał.
Co do pliku to ten, który załączyłem nazywał się jckalendarz.xla (taki zipowałem) - nie wiem skąd się wzięło to m na końcu.
ten xla bez problemu chodzi bo na stanowisku obok ma go zainstalowany mój kolega (MS office 2003)
Open office 3.1 na Windows XP
Re: Kalendarz - wybór daty do wpisania do komórki
Poniższy kod definiuje makro InsertDate(), które pozwala wstawić do bieżącej komórki datę wybraną za pomocą kalendarza. Jeżeli w komórce była już jakaś data (albo liczba), to jest ona wstępnie proponowana w dialogu.
Pozostają sprawy ergonomii (zatwierdzić zmianę dwuklikiem w polu kalendarza?) i oprawy (skrót klawiszowy?, wpis w menu?, dodatek?).Instalacja: Narzędzia→Makra→Zarządzaj→Basic→Moje makra→Nowy→Wklej kod
Pozostają sprawy ergonomii (zatwierdzić zmianę dwuklikiem w polu kalendarza?) i oprawy (skrót klawiszowy?, wpis w menu?, dodatek?).
Kod: Zaznacz cały
rem global todo: oprawa w skrót klawiszowy albo menu
rem wstawia wybraną datę do bieżącej komórki
rem todo: inne typy dokumentów
rem todo: porządne formaty komórki/pola z datą zamiast magicznych liczb
rem todo: przypadek, kiedy selection jest blokiem
rem todo: kod braku wartości (0 jest legalną wartością daty)
rem
Sub InsertDate()
doc = thisComponent
ctr = doc.currentController
cell = ctr.getSelection()
aDate = DateSelection(cell.getValue())
if aDate <> 0 then
cell.setValue(aDate)
cell.NumberFormat = 84 ' yyyy-mm-dd date
end if
End Sub
rem wywołuje dialog wyboru daty; wybrana wartość zwracana jako wynik
rem w przypadku rezygnacji zwraca wartość 0
rem
function DateSelection(aDate) as Variant
dlg = createUnoService("com.sun.star.awt.UnoControlDialogModel")
dlg.PositionX = 50
dlg.PositionY = 50
dlg.Width = 150
dlg.Height = 30
dlg.Title = "Wybór daty"
dc = createUnoService( "com.sun.star.awt.UnoControlDialog" )
dc.setModel(dlg)
field = dlg.createInstance("com.sun.star.form.component.DateField")
field.DateFormat = 11 rem "yyyy-mm-dd"
field.DropDown = True
rem w razie potrzeby: zmiana zakresu obsługiwanych dat -- format ISO
rem field.DateMin = 16000101
rem field.DateMax = 30001231
dlg.insertByName("CalendarField", field)
fc = dc.getControl("CalendarField")
fc.setPosSize(10, 10, 200, 30, com.sun.star.awt.PosSize.POSSIZE)
if aDate = 0 then
aDate = now()
end if
fc.Date = cDateToISO(aDate)
fc.setFocus()
button = dlg.createInstance( "com.sun.star.awt.UnoControlButtonModel" )
button.PushButtonType = com.sun.star.awt.PushButtonType.OK
dlg.insertByName("OKButton", button)
button.Label = "OK"
bc = dc.getControl("OKButton")
bc.setPosSize(210, 10, 50, 30, com.sun.star.awt.PosSize.POSSIZE)
button = dlg.createInstance( "com.sun.star.awt.UnoControlButtonModel" )
button.PushButtonType = com.sun.star.awt.PushButtonType.CANCEL
dlg.insertByName("CancelButton", button)
button.Label = "Anuluj"
bc = dc.getControl("CancelButton")
bc.setPosSize(260, 10, 50, 30, com.sun.star.awt.PosSize.POSSIZE)
dc.setVisible(True)
result = dc.Execute()
if result = 1 then
DateSelection = cDateFromISO(fc.Date)
else
DateSelection = 0
end if
End Function
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: Kalendarz - wybór daty do wpisania do komórki
Chętnie bym to przetestował ale ścieżka poleceń którą podałeś jest u mnie inna (mam OO 3.3.0)
U mnie mam tak: NARZĘDZIA > MAKRA > ZARZĄDZAJ MAKRAMI > i tu muszę wybrać MAKRO albo PYTHON albo BEANSHELL albo JAVASCRIPT.
Ja po zarządzaj wybiorę MAKRO to mam jakieś magiczne okno ale nie mogę nigdzie znaleźć do wklejenia kodu
U mnie mam tak: NARZĘDZIA > MAKRA > ZARZĄDZAJ MAKRAMI > i tu muszę wybrać MAKRO albo PYTHON albo BEANSHELL albo JAVASCRIPT.
Ja po zarządzaj wybiorę MAKRO to mam jakieś magiczne okno ale nie mogę nigdzie znaleźć do wklejenia kodu
Open office 3.1 na Windows XP
Re: Kalendarz - wybór daty do wpisania do komórki
W OpenOffice.org: Narzędzia→Makra→Zarządzaj→Makro→magiczne okno; z lewej > Moje makra; z prawej [Nowy]; w dialogu zatwierdź nazwę [OK] i wklej kod do edytora.
Potem Narzędzia→Makra→Wykonaj + trochę nawigacji, albo przypisz skrót klawiszowy.
Potem Narzędzia→Makra→Wykonaj + trochę nawigacji, albo przypisz skrót klawiszowy.
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: Kalendarz - wybór daty do wpisania do komórki
No jest to jakieś rozwiązanie do czasu jak komuś się nie uda przerobić tego mojego dodatku.
Dzięki
Dzięki
Open office 3.1 na Windows XP
Re: Kalendarz - wybór daty do wpisania do komórki
Obejrzałem Twój kalendarz i sądzę, że mojego dialogu w zasadzie używa się podobnie.
Właśnie opakowałem go w dodatek, który wstawia nową listwę narzędzi z jednym przyciskiem: [Wstaw datę] oraz wpis w menu Narzędzia→Dodatki→Wstaw datę. Nie proponuje skrótu klawiszowego.
Testowany w LO 3.6 i w OOo 3.3. Public domain, zero zastrzeżeń, zero gwarancji. Ale jak trzeba, to odpowiem.
Właśnie opakowałem go w dodatek, który wstawia nową listwę narzędzi z jednym przyciskiem: [Wstaw datę] oraz wpis w menu Narzędzia→Dodatki→Wstaw datę. Nie proponuje skrótu klawiszowego.
Testowany w LO 3.6 i w OOo 3.3. Public domain, zero zastrzeżeń, zero gwarancji. Ale jak trzeba, to odpowiem.
- Załączniki
-
- CalendarDlg-0.25.oxt.zip
- (3.39 KiB) Pobrany 1805 razy
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: Kalendarz - wybór daty do wpisania do komórki
Możesz podać ścieżkę jak go dodać bo mnie cały czas wyrzuca "z powodu nieznanego błędu program OO został niespodziewanie zamknięty. Wszystkie pliki zostały zachowane"
Open office 3.1 na Windows XP
Re: Kalendarz - wybór daty do wpisania do komórki
Rozpakuj oxt-a z zipa (tak, wiem, jest to podwójnie zzipowane). Następnie w OOo albo w LO, jaku zwykły user: Narzędzia → Menedżer rozszerzeń → Dodaj. Po następnym uruchomieniu winna być widoczna nowa listwa z przyciskiem.
PS. Testowałem dodatek na OOo 3.3 (Linux. Windows 7) oraz LibreOffice 3.5 i 3.6 (Linux, Windows 7). Nie wiem, czy jest zgodny z OOo 3.1. Formalnie wpisałem wymaganie wersji OO >= 3.0.
PS. Testowałem dodatek na OOo 3.3 (Linux. Windows 7) oraz LibreOffice 3.5 i 3.6 (Linux, Windows 7). Nie wiem, czy jest zgodny z OOo 3.1. Formalnie wpisałem wymaganie wersji OO >= 3.0.
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: Kalendarz - wybór daty do wpisania do komórki
Witam udalo sie moze komus dopisac ten dodatek z po ktorym wyskoczy okienko z kalendarzem? (op dwukrotnym kliknieciu w komorke) Bardzo bym bym wdzieczny.
OpenOffice 2.2.0
Re: Kalendarz - wybór daty do wpisania do komórki
Po 3 latach, modyfikacja z naniesieniem zmian API w LibreOffice.
W Apache OO może nie działać, w razie problemów proszę napisać post.
W Apache OO może nie działać, w razie problemów proszę napisać post.
- Załączniki
-
- CalendarDlg-0.25.oxt.zip
- z roku 2012, powinien wciąż działać w AOO
- (3.39 KiB) Pobrany 516 razy
-
- CalendarDlg-0.26.oxt.zip
- zmieniony w 2015 dla LO >= 4
- (3.44 KiB) Pobrany 843 razy
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: Kalendarz - wybór daty do wpisania do komórki
Żeby było ślicznie, należy po zainstalowaniu rozszerzenia, zrobić co następuje:
No i jeszcze jeden kosmetyczny zabieg. Należy Otworzyć Menu->Widok->Paski narzędzi i usunąć zaznaczenie przy pozycji Dodatek 1.
- Otworzyć nowy arkusz kalkulacyjny
- Kliknąć prawym klawiszem myszki na któryś z pasków narzędzi, np. górny i wybrać Dostosuj pasek narzędzi...
- W otwartym okienku Dostosuj, w zakładce Paski narzędzi, na liście Polecenia sekcji Zawartość paska narzędzi odnaleźć, dajmy na to, pozycję Wykres i kliknąć ją.
- Następnie kliknąć Dodaj...
- W otwartym okienku Dodaj, na liście Kategoria odnaleźć Makra LibreOffice i rozwinąć ją aż do Moje makra/CalendarDlg/Module1
- Na liście Polecenia wskazać InsertDate i kliknąć Dodaj, a potem Zamknij.
- Ponieważ przycisk w postaci klawisza z napisem "InsertDate" wygląda średnio, warto zmienić jego wystrój. W tym celu należy kliknąć Modyfikuj... a z otwartej listy wybrać Zmień nazwę. W polu Nowa nazwa wpisać, np., "Wstaw datę". Następnie kliknąć OK.
- Teraz ponownie kliknąć Modyfkuj... i z otwartej listy wybrać Zmień ikonę.
- W okienku odnaleźć jakąś stosowną ikonę, np. .uno:AddDateField i kliknąć ją. Następnie kliknąć OK
- Zatwierdzić wszystkie zmiany klikając na OK w okienku Dostosuj.
No i jeszcze jeden kosmetyczny zabieg. Należy Otworzyć Menu->Widok->Paski narzędzi i usunąć zaznaczenie przy pozycji Dodatek 1.
Re: Kalendarz - wybór daty do wpisania do komórki
Witam ja korzystam z takiego kalendarza jak w załączonym przykładzie.W razie pytań pisać.
- Załączniki
-
- data.ods
- (13.37 KiB) Pobrany 1567 razy
Apache OpenOffice 4.1.4, Windows 8.1
Re: Kalendarz - wybór daty do wpisania do komórki
Witam serdecznie.Jan_J pisze:Po 3 latach, modyfikacja z naniesieniem zmian API w LibreOffice.
W Apache OO może nie działać, w razie problemów proszę napisać post.
Dziękuję za skrypt - działa doskonale. Mam jednak problem - jak zmienić format daty? Skrypt wymusza datę YYYY-MM-DD. Ja w arkuszu potrzebuję formatu odwrotnego. Teraz wymuszam go na piechotę formatując komórkę po użyciu skryptu, ale to jest bez sensu, bo zajmuje więcej czasu niż wpisanie poprawnej daty z palca.
Pozdrawiam
Apache Openoffice 4.1.1, Xp prof
Re: Kalendarz - wybór daty do wpisania do komórki
W kodzie procedury Basica atrybut komórki nazwany NumberFormat jest na sztywno ustawiony na wartość 84.
Różne standardowe formaty dat różnią się wartością tego atrybutu; patrz
https://www.openoffice.org/api/docs/com ... mberFormat
https://wiki.openoffice.org/wiki/Docume ... er_Formats
https://api.libreoffice.org/docs/idl/re ... ormat.html
a w postaci mniej formalnej także
https://ask.libreoffice.org/en/question ... berformat/
Formaty niestandardowe mogą mieć przydzieloną wartość w wyniku zarejestrowania, co w każdym przypadku może dać inną wartość.
Różne standardowe formaty dat różnią się wartością tego atrybutu; patrz
https://www.openoffice.org/api/docs/com ... mberFormat
https://wiki.openoffice.org/wiki/Docume ... er_Formats
https://api.libreoffice.org/docs/idl/re ... ormat.html
a w postaci mniej formalnej także
https://ask.libreoffice.org/en/question ... berformat/
Formaty niestandardowe mogą mieć przydzieloną wartość w wyniku zarejestrowania, co w każdym przypadku może dać inną wartość.
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: Kalendarz - wybór daty do wpisania do komórki
Troszkę pobawiłem kodem @Jan_J, i przy pomocy makr Andrew Pitonyak dokonałem pewnych (mam nadzieję) ulepszeń.
Najważniejsze to dodałem pole kombi z listą dostępnych formatów dat, można również dodawać nowe. Ponadto dodałem możliwość wstawienia daty do zaznaczonego zakresu komórek :
Najważniejsze to dodałem pole kombi z listą dostępnych formatów dat, można również dodawać nowe. Ponadto dodałem możliwość wstawienia daty do zaznaczonego zakresu komórek :
Kod: Zaznacz cały
rem written by Jan_J, Wrocław, October 2012
rem and Rafkus sierpień 2019
rem this file is public domain
rem
rem wstawia wybraną datę do bieżącej komórki w arkuszu
rem todo: inne typy dokumentów
rem todo: porządne formaty komórki/pola z datą zamiast magicznych liczb
rem W miare prosty sposób można wybrać/stworzyć inny format daty
rem todo: obsługuje przypadek, kiedy wybrany jest blok
rem todo: kod braku wartości (0 jest legalną wartością daty)
rem
Dim cc as variant 'pole kombi w oknie dialogowym
Sub InsertDate()
Dim oCurrentSelection As Variant
Dim aDate As Double
Dim sString As String
Dim formatNum As Long
Dim komorka, oFormats As Object
Dim aLocale as new com.sun.star.lang.Locale
doc = thisComponent
oCurrentSelection = doc.getCurrentSelection()
if doc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
komorka = oCurrentSelection.getCellByPosition(0,0)
sString = komorka.getString()
if sString <> "" then
aDate = komorka.getValue()
else
aDate = now()
endif
formatNum = komorka.NumberFormat
aDate = DateSelection(aDate, formatNum) 'dialog
if aDate <> 0 then
'Najpierw sprawdź, czy istnieje format liczb
sString = UCase(cc.text) 'muszą być wielkie litery, przy małych jest problem z dodaniem nowego formatu do listy)
oFormats = doc.getNumberFormats()
formatNum = oFormats.queryKey(sString, aLocale, true)
'MsgBox "Numer formantu wybranej komórki to" & formatNum
'Jeśli format liczb nie istnieje, dodaj go
If (formatNum = -1) Then
formatNum = oFormats.addNew(sString, aLocale)
'MsgBox "Utworzono nowy format o numerze: " & formatNum
End If
for i=0 to oCurrentSelection.Columns.Count-1
for j=0 to oCurrentSelection.Rows.Count-1
komorka = oCurrentSelection.getCellByPosition(i, j)
komorka.setvalue(aDate)
komorka.NumberFormat = formatNum '84 'yyyy-mm-dd date
next j
next i
end if
' print aDate
' print sString
end if
End Sub
rem
rem wywołuje dialog wyboru daty; wybrana wartość zwracana jako wynik
rem w przypadku rezygnacji zwraca wartość 0
rem
function DateSelection(aDate,aNumer as long) as Variant
dlg = createUnoService("com.sun.star.awt.UnoControlDialogModel")
dlg.PositionX = 50
dlg.PositionY = 50
dlg.Width = 150
dlg.Height = 50
dlg.Title = "Wybór daty"
dc = createUnoService("com.sun.star.awt.UnoControlDialog")
dc.setModel(dlg)
field = dlg.createInstance("com.sun.star.form.component.DateField")
field.DateFormat = 11 rem "yyyy-mm-dd"
field.DropDown = True
field.spin = True 'dopisane
rem w razie potrzeby: zmiana zakresu obsługiwanych dat -- format ISO, np.
rem field.DateMin = 16000101
rem field.DateMax = 30001231
dlg.insertByName("CalendarField", field)
fc = dc.getControl("CalendarField")
fc.setPosSize(10, 10, 200, 30, com.sun.star.awt.PosSize.POSSIZE)
fc.Date = cDateToISO(aDate) 'skasować rem jeżeli jest stosowany OpenO.
rem fc.Date = cDateToUNODate(aDate) 'skasować rem jeżeli jest stosowany LibreO.
fc.setFocus()
button = dlg.createInstance("com.sun.star.awt.UnoControlButtonModel")
button.PushButtonType = com.sun.star.awt.PushButtonType.OK
dlg.insertByName("OKButton", button)
button.Label = "OK"
bc = dc.getControl("OKButton")
bc.setPosSize(210, 10, 50, 30, com.sun.star.awt.PosSize.POSSIZE)
button = dlg.createInstance("com.sun.star.awt.UnoControlButtonModel")
button.PushButtonType = com.sun.star.awt.PushButtonType.CANCEL
dlg.insertByName("CancelButton", button)
button.Label = "Anuluj"
bc = dc.getControl("CancelButton")
bc.setPosSize(260, 10, 50, 30, com.sun.star.awt.PosSize.POSSIZE)
rem Dodane pole combi
combo = dlg.createInstance("com.sun.star.awt.UnoControlComboBoxModel")
combo.DropDown = True
dlg.insertByName("ComboBox", combo)
cc = dc.getControl("ComboBox")
cc.setPosSize(10, 50, 200, 30, com.sun.star.awt.PosSize.POSSIZE)
Dim oFormats ' Formats in the current document.
Dim oDane ' Keys queried from the formats.
Dim i as long' General index variable.
Dim sFormat$ ' Current format string.
Dim aLocale as new com.sun.star.lang.Locale
oFormats = ThisComponent.getNumberFormats()
Rem Początkowy styl daty
if aNumer = 0 then
cc.text = "YYYY-MM-DD"
else cc.text = oFormats.getbykey(aNumer).FormatString
end if
rem lista pola combi
oDane = oFormats.queryKeys(2, aLocale, False)'com.sun.star.util.NumberFormat.DATE
For i = LBound(oDane) To UBound(oDane)
sFormat=oFormats.getbykey(oDane(i)).FormatString
'print oDane(i) & " = " & sFormat
cc.additem(sFormat,0) '0 – oznacza numer pozycji na liście
Next
dc.setVisible(True)
result = dc.Execute()
if result = 1 then
DateSelection = cDateFromISO(fc.Date) 'skasować rem jeżeli jest stosowany OpenO.
rem DateSelection = cDateFromUNODate(fc.Date) 'skasować rem jeżeli jest stosowany LibreO.
else
DateSelection = 0
end if
End Function
- Załączniki
-
- CalendarDlg-0.27r.oxt
- Przypadkiem stworzyłem wersję .otx przerobionego makra, może komuś się przyda...
- (5.67 KiB) Pobrany 326 razy
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Re: Kalendarz - wybór daty do wpisania do komórki
OK, dzięki, jak będę miał spokojny dzień to przejrzę różnice i ew. zbuduję nową wersję oxt.
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)