[solved] Data ostatniej modyfikacji pliku

Użytkowanie arkusza kalkulacyjnego
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

[solved] Data ostatniej modyfikacji pliku

Post autor: JedenGość »

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 zmieniony czw sty 21, 2021 3:44 pm przez JedenGość, łącznie zmieniany 2 razy.
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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

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 zmieniony pt sty 08, 2021 3:12 pm przez Jermor, łącznie zmieniany 1 raz.
Powód: Poprawiłem błąd w funkcji Format
AOO 4.1.15, LO 7.5.9 (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.
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Data ostatniej modyfikacji pliku

Post autor: Jan_J »

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 (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

Dzięki Panowie. Jutro postaram się wdrożyć to u siebie i napiszę jak mi poszło.
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

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.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 515
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Data ostatniej modyfikacji pliku

Post autor: Rafkus »

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
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

Jeszcze jedno! Sprawdź, czy w twoim dokumencie nie masz obszaru lub komórki, której nadałeś nazwę "dokinfo"
AOO 4.1.15, LO 7.5.9 (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.
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

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

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.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

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.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
Awatar użytkownika
Rafkus
Posty: 515
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Data ostatniej modyfikacji pliku

Post autor: Rafkus »

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

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

=DOKINFO("zmodyfikowany"; "dd mmmm yyyy")
otrzymuję np 15 styczeń 2021.

PS. Tobie wystarczyłaby taka modyfikacja:

Kod: Zaznacz cały

Case "ZMODYFIKOWANY"
      'na koniec tego warunku dopisz:
        dokinfo = format(dokinfo,"yyyy-mm-dd")   
      End With
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

Jermor pisze: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.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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

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.15, LO 7.5.9 (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.
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

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) Pobrany 182 razy
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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/v ... =28&t=5537.
Może to było przyczyną twoich problemów.
AOO 4.1.15, LO 7.5.9 (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.
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

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

=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

=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.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

Naprawdę nie wiem co zrobić. Może rację ma @Rafkus pisząc:
Rafkus pisze:... 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) Pobrany 179 razy
AOO 4.1.15, LO 7.5.9 (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.
Awatar użytkownika
Rafkus
Posty: 515
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Data ostatniej modyfikacji pliku

Post autor: Rafkus »

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.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

Rafkus pisze: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.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Data ostatniej modyfikacji pliku

Post autor: Jermor »

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.15, LO 7.5.9 (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.
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Data ostatniej modyfikacji pliku

Post autor: JedenGość »

Tak czy inaczej, gdy makro dodane jest do dokumentu to działa. I to chodziło.
Dzięki panowie.
Libre Office 7.5.4.2 / Windows 11
ODPOWIEDZ