[SOLVED]makro zamkniecia edytowanego arkusza

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
babiniec4
Posty: 53
Rejestracja: wt sie 03, 2010 10:20 pm

[SOLVED]makro zamkniecia edytowanego arkusza

Post autor: babiniec4 »

Witam i pozdrawiam forumowiczów. Szukam pomocy w takiej oto sprawie.

Pracując z arkuszem calca (podstawowy) jej efekty w pewnym momencie automatycznie zapisują się makrem w innym arkuszu (baza) uruchamianym jako "hidden".
Czasem otwieram plik baza żeby sprawdzić jego zawartość i zdarza się, że zapomnę go zamknąć gdyż korzystam z programu udostępniania wielu pulpitów. Ponowne wywołanie makra zapisu danych z arkusza podstawowego do bazy powoduje wystąpienie błędu z powodu edycji bazy.
Szukam makra, które w wypadku edycji pliku bazy zamknie go przed wywołaniem makra zapisu danych z arkusza podstawowego.
Ostatnio zmieniony pn lip 04, 2011 6:19 pm przez babiniec4, łącznie zmieniany 4 razy.
Apache OpenOffice 4.1.5 na Windows 10
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: makro zamkniecia edytowanego arkusza

Post autor: Jan_J »

Przejrzymy wszystkie otwarte dokumenty i wyłowimy ten, o który nam chodzi, i zamkniemy go.

Kod: Zaznacz cały

Sub Test()
  nazwa = "file:///wspólna baza danych, którą trzeba zamknąć"
  desktop = createUnoService("com.sun.star.frame.Desktop") 
  docs = desktop.getComponents.createEnumeration()
  do while docs.hasMoreElements()
    doc = docs.nextElement()
    url = doc.URL
    if (url = nazwa) then
       doc.Close(False) ' False | True, zależnie od tego czy chcesz zapisać bieżącą wersję
    endif
  loop
End Sub
Nie jestem pewien, czy o to Ci chodzi. Być może wystarczy po prostu sprawdzić, czy

Kod: Zaznacz cały

thisComponent.URL = nazwa
i podjąć odpowiednie kroki.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
babiniec4
Posty: 53
Rejestracja: wt sie 03, 2010 10:20 pm

Re: makro zamkniecia edytowanego arkusza

Post autor: babiniec4 »

Nie wiem czy dobrze rozumuje to makro...
Jeśli pod zmienną - nazwa- podepnę ścieżkę do pliku to po wykryciu otwartego pliku, którego url pasuje do ścieżki nastapi jego zamknięcie. Jeśli tak to o to mi chodzi ale niestety nie działa.
Oto makro, które działa ale wyświetla komunikat że plik jest edytowany...zamiast komunikatu przydałoby się jego zamkniecie.

Sub Czy_Plik_Uzyty()

Dim Sciezka, Plik, StrFileLocked As String
Sciezka = "C:/Testy/"
Plik = "Wykaz.ods"
StrFileLocked = Sciezka & ".~lock." & Plik & "#"

If FileExists(StrFileLocked) then
MsgBox ("Plik jest w użyciu",16,"Alert")

End If
End Sub
Apache OpenOffice 4.1.5 na Windows 10
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: makro zamkniecia edytowanego arkusza

Post autor: Jan_J »

Mój przykład dotyczy przeszukania otwartych dokumentów w bieżącej sesji OOo. Jeżeli Twój plik jest otwarty w innej sesji, to bieżąca sesja nie ma o tym fakcie żadnych informacji.

Twój przykład posługuje się plikiem lock, który jest tworzony w momencie otwarcia dokumentu. Taki plik może pozostać po awaryjnym zakończeniu pracy edytora, więc nie jest niezawodnym sposobem rozpoznania, czy ktoś z niego korzysta.

Plik lock jest tekstowy, i zawiera informacje na temat użytkownika, który otwierał plik, oraz komputera, na którym pracuje OOo. Należałoby skierować żądanie jego zamknięcia do odpowiedniej sesji programu, co jest wykonalne przez UNO (w przypadku Windows także przez COM, a być może -- tu nie wiem na pewno -- przez .NET), choć w przypadku UNO wymaga to nasłuchiwania zleceń przez te sesje, a w przypadku wielu użytkowników może wymagać odpowiednich uprawnień.

Szczegóły postępowania zależałyby od faktu, czy sesja, która korzysta z pliku, jest lokalna, czy zdalna.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
babiniec4
Posty: 53
Rejestracja: wt sie 03, 2010 10:20 pm

Re: makro zamkniecia edytowanego arkusza

Post autor: babiniec4 »

Wszystko działa jak należy. :bravo: :bravo: :bravo: Na początku był problem ale wynikał z tego że nazwa pliku była dwuczłonowa. Po korekcie makro działa wyśmienicie. Wielkie dzięki Jan. Pozdrawiam.
Apache OpenOffice 4.1.5 na Windows 10
ODPOWIEDZ