[Решено] Libre Office Basic Найти путь к папке файла, из которого запущен макрос

Автор ost, 13 февраля 2021, 13:56

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

ost

Доброго.

Собственно сабж.
Пока никаких мыслей нету, кроме как выпилить из текстовой строки (возвращаемой, например, по  "ThisComponent.Url") с полным путем к файлу нужный кусок без самого имени файла.

Может есть способ проще, что-нибудь похожее на екселевское "sPath = ThisWorkbook.Path"?
Спасибо.

bigor

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ost

Да. Видел. Но как получить путь. Без файла.
Я, конечно, смогу выпилить его с помощью возможностей SB по работе со строками, но нет ли пути проще?

sokol92

Придется выпиливать - это легко. Альтернатива - библиотека "Tools". Не забудьте, что свойство Url (или Location) возвращает полный путь в URL-формате.
Update. Нашел у себя подходящую функцию:
' Возвращает путь к папке для сохраненного документа.
' Если документ не сохранен, то возвращается пустая строка.
' - oDoc документ Office
' - IsNative если True, то значение возвращается в формате операционной системы, иначе в URL-формате (умолчание False)
Function Doc_Path(ByVal oDoc, Optional ByVal IsNative As Boolean) As String
 Dim s As String, arr
 If IsMissing(IsNative) Then IsNative=False
 s=oDoc.url
 If s="" Then Exit Function
 arr=Split(s, "/")
 Redim Preserve arr(Ubound(arr)-1)
 s=Join(arr, "/")
 If IsNative Then s=ConvertFromUrl(s)    
 Doc_Path=s
End Function
Владимир.

ost

Спасибо. Надо подумать, что еще понадобится.

Уже пробовал ранее писать макросы в LO. Потом пришлось писать на VBА. Теперь вот снова нужен LO.
За то время, что использовал ексель сильно расслабился. Все быстро, море инфы.

По привычке и тут хотел накостылять по-быстрому более-менее рабочее. Но не.  =)
Тут надо другим путем. Написать сначала кучу функций и вспомогательных процедур, а потом уж...
Времени только чертовски мало. =( И не программист нифига.

bigor

Если покопаться, то многое уже написано
doc=ThisComponent
fold=convertToURL(replace(convertFromURL(doc.URL),doc.Title,""))
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут