Informacje o dokumencie

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami

Oceń tę funkcję. (Mogą to zrobić tylko zalogowani użytkownicy)

1. Niepotrzebna
0
Brak głosów
2. Może się przydać
5
83%
3. Dobrze, że została napisana
1
17%
 
Liczba głosów : 6

Informacje o dokumencie

Postprzez Jermor » Cz sty 07, 2021 11:32 pm

Opis zmodyfikowany 16 stycznia 2021.
Przedstawiam, zmodyfikowaną przy współpracy z kolegą @Rafkus, funkcję napisaną dla arkusza Calc, pozwalającą otrzymać niektóre informacje o dokumencie. Pierwszy argument funkcji, podany jako tekst, decyduje jaka informacja zostanie zwrócona. Drugi argument należy podać, jeśli wynik ma zostać sformatowany wg. wymogów użytkownika, w taki sam sposób, jak to opisano w pomocy do funkcji TEKST(). Funkcję można wkopiować do biblioteki "Standard" w kontenerze "Moje makra" i wywoływać ją w arkuszu kalkulacyjnym.
DOKINFO("TypInfo";"styl")
Argument TypInfo wpisywany bezpośrednio do funkcji musi być ujęty w cudzysłów, można go wpisać dowolnymi literami i jest jednym ze słów:
  • Autoro - funkcja zwraca informację kto jest autorem dokumentu.
  • Utworzony - funkcja zwraca datę i godzinę utworzenia dokumentu.
  • Zmodyfikowany - funkcja zwraca datę i godzinę ostatniej modyfikacji.
  • Autorm - funkcja zwraca informację kto jako ostatni modyfikował dokument.
  • Czas - Funkcja zwraca informację o łącznym czasie pracy na dokumencie
  • Ile - Funkcja zwraca informację ile razy dokument był zapisywany.
Argument styl, jeśli zostanie użyty, musi prezentować format jednego z dopuszczalnych sposobów przedstawiania daty i/lub czasu także wpisany w postaci tekstu.

Przykłady:
=DOKINFO("autoro") zwróci informację o osobie, która utworzyła dokument
=DOKINFO(B2) bez drugiego argumentu, gdy B2 zawiera wpisany ciąg "czas", zwróci łączny czas pracy nad dokumentem w układzie: ilość godzin:ilość minut:ilośc sekund.
=DOKINFO("czas";"[mm]") zwróci, podany w minutach, łączny czas pracy nad dokumentem.
=DOKINFO("utworzony";"dd. mmmm yyyy") zwróci datę utworzenia dokumentu w postaci dzień. (liczba.) miesiąc (słownie) rok(liczba) np. 16. stycznia 2021
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Function DokInfo(optional info, Optional styl)
REM Funkcja zwraca wskazaną przez parametr informację o dokumencie
REM argument "info" musi być tekstem:
REM "AutorO" - podaje kto jest autorem dokumentu.
REM "Utworzony" - data utworzenie dokumentu.
REM "Zmodyfikowany" - data ostatniej modyfikacji.
REM "AutorM" - autor ostatniej modyfikacji.
REM "Ile" - Liczba sesji z dokumentem.
REM "Czas" - łączny czas pracy nad dokumentem
REM argument "styl", jeśli wystąpi, musi być jednym z dopuszczalnych formatów
REM prezentacji daty i/lub czasu podany jako tekst, tak jak w funkcji TEKST()
REM Autorzy: Jermor & Rafkus. Polskie forum Apache OpenOffice i LibreOffice (2021)
Dim oData As Object, oDoc As Object
If isMissing(info) Or isArray(info) Then DokInfo="Zły argument" : Stop
If IsMissing(styl) Then styl="Standard"
On Local Error GoTo niemodyfikowany
oDoc=ThisComponent.DocumentProperties
info=UCase(info)
With oDoc
Select Case info
   Case "AUTORO"
      DokInfo= .Author
   Case "UTWORZONY"
      oData=.CreationDate
      With oData
         DokInfo=Format(DateSerial(.Year,.Month,.Day)+TimeSerial(.hours,.minutes,.seconds),styl)
      End With
   Case "ZMODYFIKOWANY"
      oData=.ModificationDate
      With oData
         DokInfo=Format(DateSerial(.Year,.Month,.Day)+TimeSerial(.hours,.minutes,.seconds),styl)
      End With
   Case "AUTORM"   
      DokInfo=.ModifiedBy
   Case "ILE"
      DokInfo=.EditingCycles
   Case "CZAS"
      DokInfo=Format(.EditingDuration/86400,Iif(styl="Standard","[h]:mm:ss",styl))
   Case Else
      DokInfo="Zły argument"
   End Select
End With
Exit Function
niemodyfikowany:
DokInfo="Dokument nie był modyfikowany"
End Function

Do powyższego kodu uwagi dodatkowe wyjasnienia dodał Jan_J i są one zamieszczone w tym wątku: https://forum.openoffice.org/pl/forum/viewtopic.php?f=9&t=5536&p=23286#p23286
Ostatnio edytowano Wt sty 19, 2021 4:47 pm przez Rafkus, łącznie edytowano 7 razy
Powód: Zmodyfikowałem kod funkcji.
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1543
Dołączył(a): So paź 12, 2013 11:09 am

Re: Informacje o dokumencie

Postprzez Rafkus » Pt sty 08, 2021 11:43 am

Szkoda tylko, że data modyfikacji nie odświeża się automatycznie - aktualizuje się tyko podczas otwierania dokumentu.
OpenOffice 4.1.6. oraz LibreOffice 6.4 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 287
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: Informacje o dokumencie

Postprzez Jan_J » Pt sty 08, 2021 2:15 pm

Jermor napisał(a):Do powyższego kodu uwagi dodał Jan_J i są one zamieszczone w tym wątku: https://forum.openoffice.org/pl/forum/viewtopic.php?f=9&t=5536&p=23286#p23286
No nie:
uwagi dotyczyły technicznego apektu przechowywania tych informacji w dokumentach o typowych formatach; kod natomiast korzysta z interfejsu programowego (API) dotyczącego zarządzania sesjami OpenOffice.
JJ
LO (6.2|7.1) ∙ AOO 4.1 ∙ Python 3.9 ∙ Unicode 14 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 4261
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Informacje o dokumencie

Postprzez Jermor » Pt sty 08, 2021 2:56 pm

Do @Jan_J, przepraszam za niezręczność, miałem na myśli dodatkowe wyjaśnienia, które rzeczywiście mogą przydać się użytkownikowi. Poprawiłem to zdanie.
Poprawiłem niezauważony błąd w argumencie funkcji Format dotyczącej minut (w dwóch miejscach). Drugi argument tej funkcji powinien być ujęty w cudzysłów.
Do @JedenGość @Rafkus - przeoczyłem, że to ty napisałeś post o tej dacie. Zafiksowałem się na @JedenGość i to jemu pisałem objaśnienie. Data modyfikacji umieszczana jest w dokumencie w momencie jego zapisu. Funkcje przeliczane są na początku, po załadowaniu pliku oraz wtedy gdy w arkuszu nastąpią zmiany zawartości wpływające na te funkcje. Data modyfikacji nie jest zapisana w arkuszu lecz "wyciągana" z wnętrza dokumentu, więc jej zmiana w trakcie zapisu dokumentu, nie wpływa na wynik funkcji. Można jednak uzyskać tę datę podczas sesji, w której kilkukrotnie zapisuje się rezultat pracy, w ten sposób, że utworzy się formułę:
=DOKINFO("zmodyfikowany")&T(LOS()) [poprawiłem (po uwadze @Rafkus, poniżej) ponieważ wynikiem tej funkcji jest tekst , dla wyników liczbowych formułę należy uzupełnić o +0*LOS()].
LOS() wyznacza liczbę losową przy każdym przeliczaniu arkusza. Funkcja T(argument) zwraca pusty ciąg znakowy wtedy, gdy argument jest liczbą. Ponieważ LOS wyznacza liczbę zawsze i jest częścią formuły, to wymusza także w tej formule wyznaczenia wyniku funkcji DOKINFO, jeśli dokument został w między czasie zapisany, to pojawi się nowa wartość. Wartość ta pojawi się po pierwszej modyfikacji komórki i nie będzie się zmieniała podczas wprowadzania następnych zmian dopóty, dopóki dokument nie zostanie ponownie zapisany. Jest to o tyle logiczne, że po zapisie można wprowadzić i 10 000 zmian, a następnie zamknąć dokument bez zapisywania, co oznacza zaniechanie wszystkich wprowadzonych modyfikacji.
Ostatnio edytowano So sty 09, 2021 9:52 pm przez Jermor, łącznie edytowano 1 raz
Powód: Uwaga @Rafkus o nieprawidłowym operatorze łączenia w formule.
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1543
Dołączył(a): So paź 12, 2013 11:09 am

Re: Informacje o dokumencie

Postprzez Rafkus » Pt sty 08, 2021 3:11 pm

=DOKINFO("zmodyfikowany")+T(LOS())

Ten sposób zadziałał, gdy zamiast + użyłem znaku &. Dziękuję, przydatna sztuczka.
OpenOffice 4.1.6. oraz LibreOffice 6.4 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 287
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: Informacje o dokumencie

Postprzez Jermor » Pt sty 08, 2021 4:01 pm

No przecież! "&" dla ciągów tekstowych. Dla wyników liczbowych: "+ 0*LOS()"
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1543
Dołączył(a): So paź 12, 2013 11:09 am

Re: Informacje o dokumencie

Postprzez Rafkus » Wt sty 19, 2021 5:01 pm

Pozwoliłem sobie zamienić ze sobą położenie dwóch linijek kodu, oto one:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
On Local Error GoTo niemodyfikowany
oDoc=ThisComponent.DocumentProperties

Podczas testowania tej funkcji odkryliśmy, że jeżeli funkcja ta zostanie zapisana w głównym kontenerze makr (czyli w "Moich makrach") to podczas uruchamiania danego pliku powstaje jakiś błąd. Wydaje mi się, że funkcja ta zostaje po prostu wywołana za wcześnie, tj. w chwili gdy dokument nie jest jeszcze w pełni załadowany i nie wiadomo co jest "tym komponentem". Po zmianie w kodzie, zamiast wykrzaczeniu się komunikatów o błędzie, do komórki (-ek) zostanie wpisany tekst "Dokument nie był modyfikowany". I teraz znam dwa sposoby na wymuszenie pojawienia się poprawnych wartości:
    1. Jeżeli w jakiś komórkach zostały dokonane jakieś zmiany to zapisać dokument, a następnie z menu Plik wybrać Załaduj ponownie.
    2. Wykorzystać sztuczkę zaproponowaną wcześniej przez @Jermora:
    Można jednak uzyskać tę datę podczas sesji, w której kilkukrotnie zapisuje się rezultat pracy, w ten sposób, że utworzy się formułę:
    =DOKINFO("zmodyfikowany")&T(LOS()) [poprawiłem (po uwadze @Rafkus, poniżej) ponieważ wynikiem tej funkcji jest tekst , dla wyników liczbowych formułę należy uzupełnić o +0*LOS()].
    LOS() wyznacza liczbę losową przy każdym przeliczaniu arkusza. Funkcja T(argument) zwraca pusty ciąg znakowy wtedy, gdy argument jest liczbą. Ponieważ LOS wyznacza liczbę zawsze i jest częścią formuły, to wymusza także w tej formule wyznaczenia wyniku funkcji DOKINFO, jeśli dokument został w między czasie zapisany, to pojawi się nowa wartość. Wartość ta pojawi się po pierwszej modyfikacji komórki i nie będzie się zmieniała podczas wprowadzania następnych zmian dopóty, dopóki dokument nie zostanie ponownie zapisany.

PS. Opisany błąd nie pojawiał się jeżeli ta funkcja została zapisana w pliku.
OpenOffice 4.1.6. oraz LibreOffice 6.4 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 287
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: Informacje o dokumencie

Postprzez Jermor » Wt sty 19, 2021 10:11 pm

Też to zauważyłem i zamieniłem kolejność.
Co do używania funkcji LOS(). W tej wersji funkcji daty są liczbami (sformatowanymi jak data i czas), zatem należałoby dopisać +0*LOS().
Jednak wówczas wynik zostanie przekształcony znowu na liczbę. Dlatego funkcje można wywołać bez argumentu "styl" a wynikową komórkę należy sformatować na datę.
Moje spostrzeżenia sugerują, że błąd pojawia się wtedy, gdy funkcję wpisuje się do nowego dokumentu, takiego, który nie był jeszcze zapisany. Wtedy obiekt ModificationDate ma wartość NULL, czyli nie został jeszcze zainicjowany. Dlatego pojawia się błąd Basica.
Ale zauważyłem więcej dziwnych zachowań. Chyba napiszę w tej sprawie do bugzilli.
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1543
Dołączył(a): So paź 12, 2013 11:09 am

Re: Informacje o dokumencie

Postprzez AlaKowalczyk » Pn kwi 12, 2021 4:21 pm

Dzięki wielkie, bardzo użyteczna funkcja ;)
OpenOffice 2.4 pod Ubuntu 9.04
wyszukiwarka vod
AlaKowalczyk
 
Posty: 1
Dołączył(a): N kwi 11, 2021 2:23 pm


Powrót do Projekty użytkowników

Kto przegląda forum

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