Strona 1 z 1

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

PostNapisane: Śr paź 10, 2012 9:09 am
przez Andrzej.K
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

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

PostNapisane: Śr paź 10, 2012 9:39 am
przez Jan_J
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ą.

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

PostNapisane: Śr paź 10, 2012 9:52 am
przez quest-88
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.

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

PostNapisane: Śr paź 10, 2012 10:02 am
przez Andrzej.K
@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)

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

PostNapisane: Śr paź 10, 2012 3:45 pm
przez Jan_J
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

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

PostNapisane: Śr paź 10, 2012 4:09 pm
przez Andrzej.K
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

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

PostNapisane: Śr paź 10, 2012 4:13 pm
przez Jan_J
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.

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

PostNapisane: Cz paź 11, 2012 11:14 am
przez Andrzej.K
No jest to jakieś rozwiązanie do czasu jak komuś się nie uda przerobić tego mojego dodatku.

Dzięki

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

PostNapisane: So paź 13, 2012 2:25 am
przez Jan_J
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.

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

PostNapisane: Wt paź 16, 2012 12:00 pm
przez Andrzej.K
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"

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

PostNapisane: Wt paź 16, 2012 6:04 pm
przez Jan_J
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.

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

PostNapisane: Cz gru 27, 2012 1:11 pm
przez bolej1
Witam udalo sie moze komus dopisac ten dodatek z po ktorym wyskoczy okienko z kalendarzem? (op dwukrotnym kliknieciu w komorke) Bardzo bym bym wdzieczny.

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

PostNapisane: So paź 31, 2015 11:30 am
przez Jan_J
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.

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

PostNapisane: N lis 08, 2015 5:05 pm
przez Astur
Ż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.

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

PostNapisane: Wt lut 02, 2016 6:15 pm
przez kturendyk
Witam ja korzystam z takiego kalendarza jak w załączonym przykładzie.W razie pytań pisać.

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

PostNapisane: N sie 11, 2019 7:09 pm
przez urden
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

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

PostNapisane: N sie 11, 2019 9:05 pm
przez Jan_J
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ść.