проверить - открыт ли файл

Автор Sirius34, 29 августа 2024, 16:44

0 Пользователи и 1 гость просматривают эту тему.

Sirius34

Всем доброго времени суток!

В процессе работы макроса нужно получить данные из нескольких файлов, лежащих на сетевом диске.
В таблице подвязаны справочники, поэтому просто использование связей не подходит.
Соответственно, перед открытием файла для копирования, в идеале, нужно проверять - не используется ли файл в данный момент другим пользователем.
Теоретически, если не ошибаюсь, можно проверить просто по существованию в исходной папке файла lock, типа ".~lock.fname.ods", который создаётся при открытии файла (кроме режима для чтения).
Всё бы ничего, но иногда такие файлы остаются висеть после некорректного закрытия LO.
Есть ли ещё какой-то способ?

economist

Можно макросом удалять "хвосты", например если их дата вчерашняя.

Можно читать открытые файлы с помощью Python/Pandas и пересохранять их как "справочники" в ODS.

Можно самому макросом создавать свой lck-файл и тем самым улучшить стандартный механизм. Например, бухгалтер сохраняет файл, lck не уходит пока она не поставит Итого и оно не совпадает с реальной суммой строк.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

sokol92

В Excel VBA это делается так.

В LO Calc этот метод не работает - для всех существующих файлов возвращается False (в моей версии Win10 LO 24.2.5).
Владимир.

sokol92

Цитата: Sirius34 от 29 августа 2024, 16:44В процессе работы макроса нужно получить данные из нескольких файлов, лежащих на сетевом диске.
Если Вы не не вносите изменения в сетевой файл, то просто открывайте этот файл в режиме ReadOnly.
Владимир.

Sirius34

Цитата: sokol92 от 29 августа 2024, 17:56В Excel VBA это делается так.

В LO Calc этот метод не работает - для всех существующих файлов возвращается False (в моей версии Win10 LO 24.2.5).

Этот способ я знаю и проверил в первую очередь. По некоторым причинам он не подходит, почему и возник вопрос.

Всем спасибо.
Буду экспериментировать.