Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Ошибка загрузки xlsx-файла в клиенте 1С x64 через LibreOffice Calc x32

Ошибка загрузки xlsx-файла в клиенте 1С x64 через LibreOffice Calc x32
Я
   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 ?
   spectre1978
 
2 - 03.07.20 - 06:24
(0) скорее всего что-то пытается выполнить 32-битный код в адресном пространстве 64-битного процесса. Попробуйте перейти на 64-битный либреофис.
   jk3
 
3 - 03.07.20 - 23:18
(1) (2)
Снёс x32 LibreOffice, установил x64 LibreOffice.
Ошибка та же самая.

Тут дело в том, что вызывающий процесс x64, а MSScriptControl.ScriptControl -- x32.

В службах компонентов прописал по статье: https://osergey.ru/ru/call-32-bit-com-objects-to-side-64-bi/#more-508

Но не взлетает.
Почему-то у самого MSScriptControl.ScriptControl при выполнении нет доступа к ServiceManager.Bridge_GetStruct.
   acht
 
4 - 03.07.20 - 23:35
А зачем там MSScriptControl.ScriptControl вообще?
   spectre1978
 
5 - 05.07.20 - 09:12
Я так понимаю, код был утащен из-под клюшек и скриптконтрол был использован из-за неумения клюшек работать с COMSafeArray. Под восьмёркой ведь этот кусок можно попробовать переписать без скриптконтрола?
   NorthWind
 
6 - 05.07.20 - 09:27
вот здесь с Bridge_GetStruct работают напрямую Выгрузка данных в Оpen Office
   pechkin
 
7 - 05.07.20 - 10:13
1с сама умеет читать xlsx
   spectre1978
 
8 - 05.07.20 - 11:13
(7) может быть, ods читать нужно.
   jk3
 
9 - 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); 


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.