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.
[SOLVED]makro zamkniecia edytowanego arkusza
[SOLVED]makro zamkniecia edytowanego arkusza
Ostatnio zmieniony pn lip 04, 2011 6:19 pm przez babiniec4, łącznie zmieniany 4 razy.
Apache OpenOffice 4.1.5 na Windows 10
Re: makro zamkniecia edytowanego arkusza
Przejrzymy wszystkie otwarte dokumenty i wyłowimy ten, o który nam chodzi, i zamkniemy go.Nie jestem pewien, czy o to Ci chodzi. Być może wystarczy po prostu sprawdzić, czyi podjąć odpowiednie kroki.
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
Kod: Zaznacz cały
thisComponent.URL = nazwa
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: makro zamkniecia edytowanego arkusza
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
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
Re: makro zamkniecia edytowanego arkusza
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.
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)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: makro zamkniecia edytowanego arkusza
Wszystko działa jak należy. 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