Доступ с помощью макроса к открытым другим пользователем файлам

Автор almaster13, 2 апреля 2025, 15:50

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

almaster13

В системе Microsoft Windows открытые файлы можно было открыть только для чтения. Если не ошибаюсь, это же можно было сделать с помощью макросов.
А в Libre Calc можно ли взять данные из файла, открытого у другого пользователя? При попытке обращения к открытому файлу происходит ошибка. Но, к сожалению, нет возможности сделать файлу совместный доступ в свойствах файла, иначе при работе происходит полная анархия! Неужели нет другого способа?

mikekaganski

Цитата: almaster13 от  2 апреля 2025, 15:50При попытке обращения к открытому файлу происходит ошибка.

В какой строке кода?
С уважением,
Михаил Каганский

almaster13

Цитата: mikekaganski от  2 апреля 2025, 15:55
Цитата: almaster13 от  2 апреля 2025, 15:50При попытке обращения к открытому файлу происходит ошибка.

В какой строке кода?

Привожу код макроса:
Sub Nedovirabotka

oCdoc=thiscomponent
oCSheet=oCdoc.sheets(0)
 
Dim vFileDialog 'экземпляр сервиса FilePicker
Dim vFileAccess 'экземпляр сервиса SimpleFileAccess
Dim iAccept as Integer 'Ответ от FilePicker
Dim sInitPath as String 'Содержит начальный путь

Dim FileProperties(2) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
FileProperties(1).Name = "USE_CONFIG"
FileProperties(1).Value ="3"
FileProperties(2).Name = "Hidden"
FileProperties(2).Value = True

vFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
vFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
'Здесь устанавливаем начальный путь!
sInitPath = "file:///cifs/UCHET/НИИ АЭС/"
rem sInitPath = ConvertToUrl(CurDir)

If vFileAccess.Exists(sInitPath) Then
vFileDialog.SetDisplayDirectory(sInitPath)
End If

iAccept = vFileDialog.Execute() 'Выполняем диалог выбора файла
If iAccept = 1 Then 'Какое возвращаемое значение?
GetAFileName = vFileDialog.Files(0) 'Устанавливаем имя файла если не была
End If 'нажата кнопка Отмена
vFileDialog.Dispose() 'Избавляемся от диалога

rem sURLFolderA=sURLFolder+"АПРЕЛЬ 2024.xlsx"

sURLFolderA=vFileDialog.Files(0)
oAdoc = StarDesktop.loadComponentFromURL(sURLFolderA, "_blank", 0, FileProperties())

oASheet=oAdoc.sheets(0)'Tabelle 3
oArange=oASheet.getCellRangeByName("B7:E9")'source
oAarray=oArange.getDataArray()
oCrange=oCSheet.getCellRangeByName("B4:E6")'target
oCrange.setDataArray(oAarray)

oAdoc.close (true)

MsgBox "Данные успешно внесены"

End Sub

Ошибка выдается в строке с командой:
oASheet=oAdoc.sheets(0)'Tabelle 3

Если другой пользователь закрывает файл, ошибки обращения к файлу нет.

sokol92

Метод loadComponentFromURL вернет Null. если файл занят другим приложением.
Добавьте в свой список свойств FileProperties свойство "ReadOnly" со значением True.
Владимир.