|
Ошибка загрузки xlsx-файла в клиенте 1С x64 через LibreOffice Calc x32
| ☑ |
0
jk3
02.07.20
✎
22:35
|
Имеется Клиент 1С x64, LibreOffice Calc x32.
Вот такой код, который прекрасно отрабатывает на клиенте 1С x32, падает на клиенте 1С x64 в ошибкой:
"Произошла исключительная ситуация (Ошибка выполнения Microsoft JScript): Разрешение отклонено"
ServiceManager = New COMObject("com.sun.star.ServiceManager");
js = New COMObject("MSScriptControl.ScriptControl");
js.language = "javascript";
js.AddObject("ServiceManager", ServiceManager);
js.eval("Arr = new Array()");
js.eval("Arr[0] = ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); // вот на этой строке падает
|
|
1
Фрэнки
02.07.20
✎
23:16
|
Религия запрещает использование 64 бит в LibreOffice Calc ?
|
|
2
spectre1978
03.07.20
✎
06:24
|
(0) скорее всего что-то пытается выполнить 32-битный код в адресном пространстве 64-битного процесса. Попробуйте перейти на 64-битный либреофис.
|
|
3
jk3
03.07.20
✎
23:18
|
(1) (2)
Снёс x32 LibreOffice, установил x64 LibreOffice.
Ошибка та же самая.
Тут дело в том, что вызывающий процесс x64, а MSScriptControl.ScriptControl -- x32.
В службах компонентов прописал по статье:
Но не взлетает.
Почему-то у самого MSScriptControl.ScriptControl при выполнении нет доступа к ServiceManager.Bridge_GetStruct.
|
|
4
acht
03.07.20
✎
23:35
|
А зачем там MSScriptControl.ScriptControl вообще?
|
|
5
spectre1978
05.07.20
✎
09:12
|
Я так понимаю, код был утащен из-под клюшек и скриптконтрол был использован из-за неумения клюшек работать с COMSafeArray. Под восьмёркой ведь этот кусок можно попробовать переписать без скриптконтрола?
|
|
6
NorthWind
05.07.20
✎
09:27
|
вот здесь с Bridge_GetStruct работают напрямую Выгрузка данных в Оpen Office
|
|
7
pechkin
05.07.20
✎
10:13
|
1с сама умеет читать xlsx
|
|
8
spectre1978
05.07.20
✎
11:13
|
(7) может быть, ods читать нужно.
|
|
9
jk3
05.07.20
✎
23:23
|
(4) Для запуска LibreCalc в скрытом режиме (Hidden = True).
(5) Да, код старый.
(6) Спасибо, помогло.
Переписал кусок вместо MSScriptControl.ScriptControl вот так:
Property1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Property1.Name = "ReadOnly";
Property1.Value = True;
Property2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Property2.Name = "Hidden";
Property2.Value = True;
Args = New COMSafeArray("VT_VARIANT", 2);
Args.SetValue(0, Property1);
Args.SetValue(1, Property2);
Document = Desktop.LoadComponentFromURL(GetFileURL(FilePath), "_blank", 0, Args);
|
|