Kalendarz - wybór daty do wpisania do komórki

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO

Kalendarz - wybór daty do wpisania do komórki

Postprzez Andrzej.K » Śr paź 10, 2012 9:09 am

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
Załączniki
jckalendarz.zip
(47.36 KiB) Pobrane 3223 razy
Open office 3.1 na Windows XP
Andrzej.K
 
Posty: 5
Dołączył(a): Śr paź 10, 2012 9:00 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » Śr paź 10, 2012 9:39 am

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ą.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez quest-88 » Śr paź 10, 2012 9:52 am

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:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
[Window Title]
C:\jckalendarz.xlam

[Content]
Wystąpiły problemy z przesłaniem polecenia do programu.

[OK]


Potem sugeruje konwersje z XLA do XLAM, co nic nie zmienia. XLAM również wypluwa taki błąd.
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.
Avatar użytkownika
quest-88
 
Posty: 1105
Dołączył(a): N maja 24, 2009 8:12 pm
Lokalizacja: Zabrze

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Andrzej.K » Śr paź 10, 2012 10:02 am

@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)
Open office 3.1 na Windows XP
Andrzej.K
 
Posty: 5
Dołączył(a): Śr paź 10, 2012 9:00 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » Śr paź 10, 2012 3:45 pm

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?).
Kod: Zaznacz cały   Rozszerz widokZwiń widok
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
Instalacja: Narzędzia→Makra→Zarządzaj→Basic→Moje makra→Nowy→Wklej kod
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Andrzej.K » Śr paź 10, 2012 4:09 pm

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
Open office 3.1 na Windows XP
Andrzej.K
 
Posty: 5
Dołączył(a): Śr paź 10, 2012 9:00 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » Śr paź 10, 2012 4:13 pm

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.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Andrzej.K » Cz paź 11, 2012 11:14 am

No jest to jakieś rozwiązanie do czasu jak komuś się nie uda przerobić tego mojego dodatku.

Dzięki
Open office 3.1 na Windows XP
Andrzej.K
 
Posty: 5
Dołączył(a): Śr paź 10, 2012 9:00 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » So paź 13, 2012 2:25 am

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.
Załączniki
CalendarDlg-0.25.oxt.zip
(3.39 KiB) Pobrane 1340 razy
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Andrzej.K » Wt paź 16, 2012 12:00 pm

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
Andrzej.K
 
Posty: 5
Dołączył(a): Śr paź 10, 2012 9:00 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » Wt paź 16, 2012 6:04 pm

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.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez bolej1 » Cz gru 27, 2012 1:11 pm

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
bolej1
 
Posty: 4
Dołączył(a): Cz gru 27, 2012 12:58 pm

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » So paź 31, 2015 11:30 am

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.
Załączniki
CalendarDlg-0.25.oxt.zip
z roku 2012, powinien wciąż działać w AOO
(3.39 KiB) Pobrane 211 razy
CalendarDlg-0.26.oxt.zip
zmieniony w 2015 dla LO >= 4
(3.44 KiB) Pobrane 477 razy
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Astur » N lis 08, 2015 5:05 pm

Żeby było ślicznie, należy po zainstalowaniu rozszerzenia, zrobić co następuje:
  1. Otworzyć nowy arkusz kalkulacyjny
  2. Kliknąć prawym klawiszem myszki na któryś z pasków narzędzi, np. górny i wybrać Dostosuj pasek narzędzi...
  3. 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ą.
  4. Następnie kliknąć Dodaj...
  5. W otwartym okienku Dodaj, na liście Kategoria odnaleźć Makra LibreOffice i rozwinąć ją aż do Moje makra/CalendarDlg/Module1
  6. Na liście Polecenia wskazać InsertDate i kliknąć Dodaj, a potem Zamknij.
  7. 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.
  8. Teraz ponownie kliknąć Modyfkuj... i z otwartej listy wybrać Zmień ikonę.
  9. W okienku odnaleźć jakąś stosowną ikonę, np. .uno:AddDateField i kliknąć ją. Następnie kliknąć OK
  10. Zatwierdzić wszystkie zmiany klikając na OK w okienku Dostosuj.
Teraz we wskazanym miejscu (tu: w okolicy wstawiania wykresu) pojawi się nowy przycisk z wybraną ikonką. Po wskazaniu go myszką pojawi się podpowiedź "Wstaw datę", a po kliknięciu, otworzy się stosowne okienko.

No i jeszcze jeden kosmetyczny zabieg. Należy Otworzyć Menu->Widok->Paski narzędzi i usunąć zaznaczenie przy pozycji Dodatek 1.
Manjaro – LibreOffice 6.1.6.3
Zanim zastosujesz się do jakiejś rady, zrób kopię zapasową dokumentu, którego ona ma dotyczyć.
Wskazówka: w dokumentach używam niestandardowych, bezpłatnych czcionek Gentium i Lato
Avatar użytkownika
Astur
 
Posty: 592
Dołączył(a): Wt lip 13, 2010 9:11 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez kturendyk » Wt lut 02, 2016 6:15 pm

Witam ja korzystam z takiego kalendarza jak w załączonym przykładzie.W razie pytań pisać.
Załączniki
data.ods
(13.37 KiB) Pobrane 1036 razy
Apache OpenOffice 4.1.4, Windows 8.1
kturendyk
 
Posty: 30
Dołączył(a): Pt sty 22, 2016 4:59 pm

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez urden » N sie 11, 2019 7:09 pm

Jan_J napisał(a):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.


Witam serdecznie.
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
urden
 
Posty: 11
Dołączył(a): Cz mar 12, 2015 10:14 am

Re: Kalendarz - wybór daty do wpisania do komórki

Postprzez Jan_J » N sie 11, 2019 9:05 pm

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ść.
JJ
LO (6.1|6.2) ∙ AOO 4.1.6 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3923
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław


Powrót do Makra i programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości