[solved] Data ostatniej modyfikacji pliku

Użytkowanie arkusza kalkulacyjnego

[solved] Data ostatniej modyfikacji pliku

Postprzez JedenGość » Cz sty 07, 2021 7:35 pm

Poszukuję rozwiązania tego typu.

W jakiejś komórce wyświetla sie data ostatniej modyfikacji pliku. Modyfikacji, tzn., że wykonałem edycję jakiejkolwiek komórki w tym pliku.

Funkcja TERAZ nie bardzo pasuje, ponieważ zawsze wyświetla bieżącą datę i godzinę.

Google podpowiada jedynie opcje z makrami lub śledzeniem zmian.
Przejrzałem wyszukiwarkę forum, ale podane rozwiązania są mocno archiwalne i jakoś nie mogę ich wdrożych w bieżącym LO.

Z góry dzięki za pomoc.
Ostatnio edytowano Cz sty 21, 2021 3:44 pm przez JedenGość, łącznie edytowano 2 razy
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Cz sty 07, 2021 10:38 pm

Podczas zapisywania dokumentu w jego właściwościach zapisywanych jest wiele informacji tego dokumentu dotyczących. Wśród nich autor dokumentu, data i godzina utworzenia, nazwa użytkownika, który ostatni zmodyfikował dokument, data i godzina ostatniej modyfikacji, czas przez jaki dokument był używany oraz ile razy był zapisywany.
Napisałem funkcję DOKINFO, która zwraca jedną z tych wymaganych informacji. Funkcja ma jeden argument tekstowy, który decyduje jaka informacja zwrotna ma się pojawić.
"AUTORO" - autor oryginału
"UTWORZONY" - data i godzina utworzenia dokumentu
"ZMODYFIKOWANY" - data i godzina ostatniej modyfikacji
"AUTORM" - autor ostatniej modyfikacji
"CZAS" - łączny czas pracy na dokumencie
"ILE" - liczba mówiąca ile razy dokument był zapisywany.
Przykład: =DOKINFO("czas")
Funkcję najlepiej dodać do kontenera "Moje makra" do modułu w bibliotece "Standard". Można jej wówczas używać w każdym otwieranym dokumencie Calca na tym komputerze, albo dodać do biblioteki "Standard" kontenera dokumentu, wówczas będzie dostępna na każdym komputerze, na którym dokument zostanie otwarty.
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Function DokInfo(optional info)
REM Funkcja zwraca wskazaną przez parametr informację o dokumencie
REM argument musi byc 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 Autor: Jermor. 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
oDoc=ThisComponent.DocumentProperties
info=UCase(info)
With oDoc
Select Case info
   Case "AUTORO"
      DokInfo= .Author
   Case "UTWORZONY"
      oData=.CreationDate
      With oData
         DokInfo= .Year & "." & Format(.month,"00") & "." & Format(.day,"00")
         DokInfo= DokInfo & "  " & Format(.hours,"00") & ":" & Format(.minutes,"00") & ":" & Format(.seconds,"00")
      End With
   Case "ZMODYFIKOWANY"
      oData=.ModificationDate
      With oData
         DokInfo= .Year & "." & Format(.month,"00") & "." & Format(.day,"00")
         DokInfo= DokInfo & "  " & Format(.hours,"00") & ":" & Format(.minutes,"00") & ":" & Format(.seconds,"00")
      End With
   Case "AUTORM"   
      DokInfo=.ModifiedBy
   Case "ILE"
      DokInfo=.EditingCycles
   Case "CZAS"
      DokInfo= .EditingDuration
      DokInfo=Int(DokInfo/3600) & ":" & Format(Int((DokInfo Mod 3600) /60),"00") & ":" & Format(DokInfo Mod 60,"00")
   Case Else
      DokInfo="Zły argument"
   End Select
End With
End Function
Ostatnio edytowano Pt sty 08, 2021 3:12 pm przez Jermor, łącznie edytowano 1 raz
Powód: Poprawiłem błąd w funkcji Format
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Jan_J » Cz sty 07, 2021 11:14 pm

Dodam, że dane te są przechwywane w dokumencie w sposób zależny od jego formatu.

W przypadku dokumentów OpenDocument Format (w tym m.in. skoroszytów .ods) znajdują się one w pliku meta.xml spakowanym do kontenera zip. jakm jest plik dokumentu.
W dokumentach Office Open XML (m.in. skoroszyty xlsx, nazwa formatu CELOWO podobna) są one umieszczane w pliku docProps/core.xml. Pakowanie do zip jest tu zastosowane analogicznie.

Tak więc, w powyższych formatach metainformacja (1) jest odseparowana od samej treści dokumentu (w ramach tego samego zip-a), ale (2) nie jest w żaden sposób chroniona, nie musi zatem odzwierciedlać prawdziwej historii działań z plikiem dokumentu.
JJ
LO (6.2|7.0) ∙ AOO 4.1.9 ∙ Python 3.8 ∙ Unicode 13 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 4256
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Cz sty 07, 2021 11:32 pm

Dzięki Panowie. Jutro postaram się wdrożyć to u siebie i napiszę jak mi poszło.
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pt sty 08, 2021 3:15 pm

Poniewczasie zauważyłem omyłkowo wprowadzony argument w jednej z funkcji Format (w dwóch miejscach kodu). Poprawiłem to. Należy pobrać poprawioną wersję. O samej funkcji więcej jest w dziale "Projekty użytkowników".
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Pt sty 08, 2021 8:44 pm

Dodałem kod do kontenera moje makra.

Próbuję wywołać:

=DOKINFO("czas") pojawia się błąd 509 - "509 -Brak operatora -Brakujący operator, na przykład w wyrażeniu "=2(3+4)*" brak operatora między cyfrą "2" a nawiasem "("."

=DOKINFO("zmodyfikowany") pojawia się błąd 501 - "501 - Nieprawidłowy znak - Nieprawidłowy znak w formule."

Co robię nie tak?

P.S. Cytaty z helpa LO.
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Rafkus » Pt sty 08, 2021 10:28 pm

Nie jestem pewien, ale wydaje mi się że ktoś już zgłaszał taki błąd niedziałającego makra i było powiedziane, że jest to wina stosowania testowej wersji oprogramowania. Polacy i Anglicy mają różne opinie co do stabilnej wersji, według nich wersją stabilną jest 6.4.7.

U mnie makro działa bez problemu zarówno w OO i LO
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: 281
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » So sty 09, 2021 1:57 pm

Na innym komputerze mam wersję 7.0.4.2. Wgrałem tę funkcję i działa bez żadnych problemów.
Utwórz nowy plik, w którym zastosujesz tę funkcję (może nawet w kilku wariantach) i zamieść go na forum. Wczytam go i zobaczę czy ten błąd się pojawi po otwarciu pliku w moim komputerze.
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » So sty 09, 2021 2:01 pm

Jeszcze jedno! Sprawdź, czy w twoim dokumencie nie masz obszaru lub komórki, której nadałeś nazwę "dokinfo"
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Pt sty 15, 2021 4:48 pm

Przepraszam, że tak długo się nie odzywałem, ale mam bardzo dużo zajęć.

Po tych kilku dniach (domyślnie: restarcie komputera) okazało się, ze to makro działa. Świetnie. OK.

Zacząłem grzebać w kodzie makro Jermora (chociaż nigdy tego nie robiłem). Po prostu chciałbym uzyskać format wyświetlenia OPCJI zmodyfikowany jako RRRR-MM-DD i nic więcej.

Mój fragment zmodyfikowanego kodu wygląda tak:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
Case "ZMODYFIKOWANY"
      oData=.ModificationDate
      With oData
         DokInfo= .Year & "-" & Format(.month,"00") & "" & Format(.day,"00")
               End With


Nietety to nie działa. Nic się nie wyświetla, a przy otwarciu pliku pojawia się komunikat o błędzie makro ("Błąd uruchomieniowy języka basic. Nie naleziono właściwości lub metody. DocumentPrioperties).

Gdzie robię błąd?
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pt sty 15, 2021 5:10 pm

Rozumiem, że twoim wynikiem ma być tylko data, dlatego usunąłeś druga linijkę kodu.
Wiersz wyznaczający datę: każdą kropkę ujętą w cudzysłowy zastąp myślnikiem. Zrobiłeś to w jednym miejscu, musisz to powtórzyć w drugim.
Gdzie robisz błąd? Nie wiadomo. Zamieściłeś tylko ten zmieniony fragment a on sam w sobie działa prawidłowo i w tej postaci tworzy zapis typu 2021-0114 (brak tego drugiego myślnika).
Poprawiałeś blok With. Każdy blok With musi kończyć się swoim With End, może pozostał jeszcze jeden With End?
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pt sty 15, 2021 5:19 pm

Oczywiście zamiast poprawiać makro, możesz wpisać formułę:
=PODSTAW(DOKINFO("zmodyfikowany");".";"-")
a jeżeli potrzebujesz tylko datę to
=LEWY(PODSTAW(DOKINFO("zmodyfikowany");".";"-");10)
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Pt sty 15, 2021 6:05 pm

Coś mi się ostro wykrzaczyło z makrami. Usunąłem poprzednie makro. Dodałem nowe w 100% podane przez Ciebie, a mimo to przy otwarciu pojawia się błąd uruchomieniowy języka basic. Zadne wartości nie są zwracane pomimo wpisania formuł przez Ciebie podanych...
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pt sty 15, 2021 6:15 pm

Musiałbym zobaczyć zawartość twojej biblioteki.
Czy funkcja jest dopisana do biblioteki "Standard" kontenera "Moje makra" czy do kontenera pliku?
Jeśli do kontenera pliku, to czy masz ustawione uprawnienia do uruchamiania makr?
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Rafkus » Pt sty 15, 2021 6:30 pm

Ja również nie potrzebowałem czasu ostatniej modyfikacji i dlatego pozwoliłem sobie nieco wcześniej, na drobna modyfikację tej funkcji. Mianowicie dodałem kolejny opcjonalny parametr Styl którym określam w jaki sposób ma zostać zwrócona.
Zmienione fragmenty kodu wyglądają tak:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Function DokInfo(optional info, optional styl)
'... Orginalny kod Jermora
Case "ZMODYFIKOWANY"
      oData=.ModificationDate
      With oData
         DokInfo= .Year & "." & Format(.month,"00") & "." & Format(.day,"00")
         DokInfo= DokInfo & "  " & Format(.hours,"00") & ":" & Format(.minutes,"00") & ":" & Format(.seconds,"00")
        'Poniżej dodane dwie linijki kodu:
         If IsMissing(styl) Then styl= "Standard"
         DokInfo = format(DokInfo, styl)     
      End With
'i odąd reszta bez zmiany

I teraz dzięki wpisaniu do komórki arkusza polecenia:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=DOKINFO("zmodyfikowany"; "dd mmmm yyyy")

otrzymuję np 15 styczeń 2021.

PS. Tobie wystarczyłaby taka modyfikacja:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Case "ZMODYFIKOWANY"
      'na koniec tego warunku dopisz:
        dokinfo = format(dokinfo,"yyyy-mm-dd")   
      End With
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: 281
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Pt sty 15, 2021 7:49 pm

Jermor napisał(a):Musiałbym zobaczyć zawartość twojej biblioteki.
Czy funkcja jest dopisana do biblioteki "Standard" kontenera "Moje makra" czy do kontenera pliku?
Jeśli do kontenera pliku, to czy masz ustawione uprawnienia do uruchamiania makr?


Jest dopisana do Moje makara -> standard -> module3.

Jak usunę całe Module3 to w momencie otwierania pliku wszystko jest ok.

Jak dodam to makro w oryginalnej wersji Jermora lub z modyfikacjami Rafkusa wtedy następuje błąd uruchomieniowy języka basic.
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pt sty 15, 2021 9:35 pm

Najpierw odpowiedź co do sugestii @Rafkusa.
To bardzo dobra sugestia i dobre rozwiązanie ale wymaga wyjaśnień.
Poprawka zadziała, gdy użytkownik ma w swoich opcjach office-a ("Narzędzia -> Opcje -> Ustawienia języka -> Języki -> Akceptowane wzorce dat") wpis Y.M.D;M.D, gdyż wtedy zapis 2021.01.15 zostanie potraktowany jako data. Jeśli jest inny, np. D.M.Y;D.M, wynik DokInfo nie zostanie potraktowany jako data i formatowanie nie zostanie wykonane. DokInfo jest bowiem tekstem.
Dlatego rozwiązanie działające generalnie wymaga takich zmian w tej funkcji:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Function DokInfo(optional info, Optional styl)
REM Funkcja zwraca wskazaną przez parametr informację o dokumencie
REM argument musi byc 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 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"
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= .EditingDuration
      DokInfo=Int(DokInfo/3600) & ":" & Format(Int((DokInfo Mod 3600) /60),"00") & ":" & Format(DokInfo Mod 60,"00")
   Case Else
      DokInfo="Zły argument"
   End Select
End With
End Function

Funkcja DateSerial zwraca datę w postaci liczbowej a TimeSerial czas w postaci ułamka, więc można tę liczbę formatować. Format "Standard" przedstawi datę z czasem w formacie domyślnie ustawionym dla pakietu Office zgodnie z lokalizacją i wyborem użytkownika. Wybierając własne formatowanie możemy decydować o tym jak data i czas będzie prezentowana. Czyli np. =DokInfo("zmodyfikowany";"yy") zwróci tylko dwie ostatnie cyfry roku.
Do @JedenGość
Nadal nie widzę wyjaśnienia. Coś musi być źle przepisane. Skopiuj całą zawartość Module3, wklej do dokumentu (np. Writera) i zamieść ten dokument na forum. Zajrzę do niego bo na podstawie twojego opisu nic nie potrafię wywnioskować.
Możesz spróbować dograć tę funkcję do Module1 albo Module2. Na pewno jest tam sporo miejsca, bo moduły mogą zawierać łącznie 64kB danych.
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Pt sty 15, 2021 10:03 pm

W załaczniku przesyłam kopię module.

Skopiowałem ostatnie makro, ale komunikat błędu pojawia się stale.
Załączniki
DokInfo_JedenGosc.odt
(15.33 KiB) Pobrane 67 razy
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pt sty 15, 2021 11:31 pm

Skopiowałem ten zwrócony kod do utworzonego specjalnie na tę okoliczność Module4 i wszystko funkcjonuje! Czyli nie ma błędu w samym kodzie.
Jeśli wcześniej wstawiałeś ten kod do innego modułu w tej bibliotece, sprawdź, czy usuwając jego kopię, nie pozostawiłeś jakichś szczątków kodu.
Prawdę mówiąc, to bez fizycznej możliwości zajrzenia do biblioteki nie mam żadnego pomysłu co może być powodem takiego stanu. Nigdy coś takiego mi się nie przytrafiło, nie mam zatem żadnego odniesienia do tej sytuacji.
Sprawdź także, czy cos nie pozostało w w kontenerze pliku. Wywołane funkcje, najpierw są poszukiwane w bibliotece "Standard", w kolejnych modułach, w kontenerze pliku a dopiero w drugiej kolejności w modułach takiej samej biblioteki w kontenerze "Moje makra".
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » So sty 16, 2021 2:02 pm

Jeszcze jedno. Jak zauważyłem nigdy nie podałeś jaki dokładnie komunikat się pojawia.
Analizując kod, zauważyłem, że błędne działanie pojawi się gdy w nowoutworzonym arkuszu wpisze się funkcję z argumentem "zmodyfikowany". Jest tak dlatego, że w tym momencie nie ma jeszcze utworzonego elementu ModificationDate. Tenże powstanie dopiero po pierwszym zapisaniu pliku. Mając to na uwadze, oraz rozwiązania zaproponowane przez @Rafkus, przerobiłem kod tej funkcji. Nowa postać i opis znajdują się w dziale "Projekty użytkowników" w tym poście: https://forum.openoffice.org/pl/forum/viewtopic.php?f=28&t=5537.
Może to było przyczyną twoich problemów.
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » N sty 17, 2021 7:12 pm

W Moje makra mam tylko jedno - GdzieJest pobrane z tego forum (załącznik). Makra LO są domyślne.

Przejrzałem wszystkie pliki modyfikowane po 7 stycznia (data rozpoczęcia tego wątku). Nigdzie nie ma żadnych makr w makrach dokumentu.

Skopiowałem zaktualizowaną wersję makra DokInfo. Problem (komunikat) ten sam.

Błąd uruchomieniowy języka BASIC.
Nie znaleziono właściwości lub metody: DocumentProperties.


Ale zacząłem kombinować dalej.

Usunąłem z arkusza formułę:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=DOKINFO("zmodyfikowany"; "dd mmmm yyyy")


Zamknąłem / otworzyłęm plik. Wszystko ok, żadnych komunkatów. Dodałem ponownie tę formułę. Ponownie ten sam błąd.

Wstawiam formułę:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=LEWY(PODSTAW(DOKINFO("zmodyfikowany");".";"-");10)


Ponownie ten sam błąd.

Resumując: jak nie mam żadnych formuł wywołujących działanie makro to plik otwiera się bez komunikatu o błedzie. Jeśli dodam, którąś z proponowanych formuł - pojawia się błąd.
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » N sty 17, 2021 9:20 pm

Naprawdę nie wiem co zrobić. Może rację ma @Rafkus pisząc:
Rafkus napisał(a):... wydaje mi się że ktoś już zgłaszał taki błąd niedziałającego makra... jest to wina stosowania testowej wersji oprogramowania.

Może coś się stało z bibliotekami pakietu? Bo pisałeś, że funkcja ci działała i chciałeś tylko zmienić coś w kodzie. Może warto wykonać instalację naprawczą.
Podłączam testowy plik, który na pewno działa na LibreOffice 7.0.4.2, to obecnie najnowsza dostępna wersja.
Zobacz, czy zadziała u ciebie, jeśli nie - zmień wersję na 7.0.4 i sprawdź ponownie.
Załączniki
dokinfo2.ods
(10.57 KiB) Pobrane 70 razy
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Rafkus » N sty 17, 2021 10:58 pm

Pobrałem plik @Jermora, otworzyłem i ... wystąpił opisywany błąd.
Zdziwiony otwarłem plik w OO i... znowu błąd.
Otworzyłem mój "stary" plik makro działa...
Znów otworzyłem plik @Jermora, pojawiły się błędy. Po wyłączeniu komunikatów z menu plik wybrałem załaduj ponownie i makro zadziałało - pojawiły się wymagane informacje.

Zastanowiłem się i doszedłem do wniosku że makro działa poprawnie jak jest ZAPISANE W DOKUMENCIE.
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: 281
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » N sty 17, 2021 11:46 pm

Rafkus napisał(a):Zastanowiłem się i doszedłem do wniosku że makro działa poprawnie jak jest ZAPISANE W DOKUMENCIE.


Tak działa :) Bynajmniej dzisiaj.

Sprawdziłem jeszcze i dodałem ponownie do moje makra, ale zostawiłem też w dokumencie. Działa, chociaż mam wrażenie, że próbowałem już podobnej konfiguracji (ale chyba z wcześsniejszymi wersjami makra).

Tak czy inaczej problem wydaje się rozwiązany. Sprawdzę jeszcze dokładnie jutro na innych plikach.

DZIĘKUJĘ!
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pn sty 18, 2021 1:31 pm

Koledzy! Teraz to i ja stwierdziłem błędne działanie. Sądzę, że jest to jakiś bug, bowiem testy wykazały coś następującego (testy dotyczą funkcji w "Moje makra).
  • Gdy zostanie otwarty dokument, który nie zawiera tej funkcji i wpisze się ją do dokumentu, wykona sie ona prawidłowo.
  • Gdy dokument Calc jest ładowany jako pierwszy po otwarciu pakietu LibreOffice, pojawia się błąd związany z obiektem DocumentProperties. Ponieważ w poprawionej wersji funkcji jest instrukcja On Local Error, nie pojawia się komunikat błędu lecz tekst "Dokument nie był modyfikowany". Wykonanie operacji "Załaduj ponownie" przywraca prawidłowe działanie funkcji.
  • Jeśli jakikolwiek dokument Calc-a zostanie załadowany wcześniej i następnie zostanie załadowany plik z rzeczoną funkcją, wszystko funkcjonuje poprawnie.
  • Jeśli zostanie załadowany jakiś dokument Writera i z tego dokumentu poleceniem "Plik -> Ostatnie dokumenty" zostanie wskazany plik Calca zawierający tę funkcję, otwarty arkusz działa prawidłowo.
Zrobiłem jeszcze następujący eksperyment: Rozbudowałem funkcję, dodając przed On Local Error instrukcję:
i=ThisComponent.Sheets(0).GetCellByPosition(0,0).string oraz instrukcję Print i. Okazało się, że Print wyświetlał puste okienko, i dopiero po przeładowaniu funkcji pojawił się komunikat z napisem "zmodyfikowano". Czyli wnioskuję, że coś jest nie tak z implementacją Basica. Tylko, że za słabo się na tym znam.
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez Jermor » Pn sty 18, 2021 3:38 pm

Muszę zweryfikować spostrzeżenie z punktu trzeciego i czwartego. Funkcja nie wykonuje się jednak prawidłowo.
Potwierdzam spostrzeżenia Rafkusa, że gdy funkcja jest umieszczona w kontenerze pliku, to wykonuje się prawidłowo.
Różne testy z funkcjami testowymi wskazują, że jeśli funkcja odwołuje się do wnętrza arkusza, nie poprzez przekazane argumenty, lecz przez wskazanie tych miejsc instrukcjami Basica, to przy pierwszym uruchomieniu dokumentu nie funkcjonują one prawidłowo. Dopiero przeładowanie przywraca ich właściwe działanie.
Co jednak niczego nie wyjaśnia.
AOO 4.1.10, LO 7.0.6 (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: 1512
Dołączył(a): So paź 12, 2013 11:09 am

Re: Data ostatniej modyfikacji pliku

Postprzez JedenGość » Cz sty 21, 2021 3:44 pm

Tak czy inaczej, gdy makro dodane jest do dokumentu to działa. I to chodziło.
Dzięki panowie.
Libre Office 7.1.1.2 / Windows 10
JedenGość
 
Posty: 95
Dołączył(a): Cz mar 07, 2019 6:54 pm


Powrót do Calc

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości