Имя: Пароль:
1C
1C 7.7
v7: Открыть XLS файл средствами Libre Office 3.4
0 megatrend
 
16.11.11
18:05
Имеется код чтения xls-файла, который написан для Open Office. Админ снёс его и поставил вместо него Libre Office 3.4. Код перестал работать :
ServiceManager = СоздатьОбъект("com.sun.star.ServiceManager");
{Документ.Приходная.Форма.Модуль(217)}: Неудачная попытка создания объекта (com.sun.star.ServiceManager)

Возможно ли подружить этот код с Libre Office 3.4 ? Если да, то как?
1 megatrend
 
16.11.11
18:06
Уточнение : админ снёс Open Office.
2 Vladal
 
16.11.11
18:10
На страничке http://support.microsoft.com/kb/927229
посмотри описание программы просмотра объектов OLE/COM (oleview.exe).
http://download.microsoft.com/download/win2000platform/oleview/1.00.0.1/nt5/en-us/oleview_setup.exe

Она покажет, какое имя объекта зарегистрировано в системе для каждого COM-приложения
3 Vladal
 
16.11.11
18:17
Например, наша любимая 1С 7.7 в ветке COM Library Objects -- All Objects -- v77.Application
4 smaharbA
 
16.11.11
18:32
(16) запусти либру интерактивно
5 smaharbA
 
16.11.11
18:33
+ если портабла, то немного действий добавить с реестром (можно под усерскими правами и из самой адинес)
6 megatrend
 
16.11.11
18:35
(4) запускал - не помогло.
7 Vladal
 
16.11.11
19:15
(6) А на (2) что скажешь?
8 smaharbA
 
16.11.11
19:22
(6) значит делай (5)
9 smaharbA
 
16.11.11
19:24
как то так

//*******************************************
Процедура Сформировать()
   Перем Имя,Путь,Шел,ФСО,Файл,Параметр;
   Перем Ошибка,СервисМанагер,ШелСкрипт,Стр,ЗапускОО,Запуск,Версия,КласИд,Сп,База,Заголовок;
   Попытка
       СервисМанагер=СоздатьОбъект("com.sun.star.ServiceManager");
   Исключение
       Ошибка=1;
   КонецПопытки;
   Если Ошибка=1 Тогда
       Если ФС.ВыбратьФайл(0,Имя,Путь,"Выберете Носимый офис...","Файл Настройки Офиса (*.ini)|*.ini","ini")=0 Тогда
           Возврат;
       КонецЕсли;
       Текст=СоздатьОбъект("Текст");
       Текст.Открыть(Путь+Имя);
       Для Сч=1 По Текст.КоличествоСтрок() Цикл
           Стр=СокрЛП(Текст.ПолучитьСтроку(Сч));
           Если Найти(Врег(Стр),Врег("OpenOfficeDirectory"))=1 Тогда
               Файл=Путь+"\"+СокрЛП(Сред(Стр,Найти(Стр,"=")+1))+"\program\soffice.exe";
               Прервать;
           КонецЕсли;
       КонецЦикла;
       Если ФС.СуществуетФайл(Файл)=0 Тогда
           Сообщить("Фигня какая то!!! Нету пускалки.","!!!");
           Возврат;
       КонецЕсли;
       ФСО=СоздатьОбъект("Scripting.FileSystemObject");
       Шел=СоздатьОбъект("Shell.Application");
       Путь=Шел.NameSpace(ФСО.GetFile(Файл).ParentFolder.Path);
       Файл=Путь.ParseName(ФСО.GetFile(Файл).Name);
       Сообщить(Путь.GetDetailsOf(Файл,35));
       Если Найти(Врег(Путь.GetDetailsOf(Файл,35)),"OPENOFFICE")=0 Тогда
           Сообщить("Фигня какая то!!! Пускалка то не та вроде.","!!!");
           Возврат;
       КонецЕсли;
       ШелСкрипт=СоздатьОбъект("WScript.Shell");
       ЗапускОО=""""+Файл.Path+""" -nodefault -nologo";
       ШелСкрипт.exec(ЗапускОО).Terminate();
       Запуск=ШелСкрипт.exec(ЗапускОО);
       Ожидание=20000;
       Нач=_GetPerformanceCounter();
       Пока (Запуск.Status=0) или (_GetPerformanceCounter()-Нач>Ожидание) Цикл
           ВвестиСтроку("Ждем...","Ждем...",7,,1);
       КонецЦикла;
       //КлассИд=Лев(СкриптЛет.GUID,38);
       //КлассИд="{096FA06A-0374-5F54-C4F6-BDCEAAE420ED}";
       Стр="com.sun.star.ServiceManager";
       Версия=1;
       КлассИд="{82154420-0FBF-11d4-8313-005004526AB4}";
       Сп=СоздатьОбъект("СписокЗначений");
       СкриптЛет=СоздатьОбъект("Scriptlet.TypeLib");
       База="HKCU\Software\Classes";
       Путь=База+"\CLSID\" + КлассИд;
       Заголовок="OpenOffice.org Service Manager (Ver 1.0 OOPortable)";
       Сп.ДобавитьЗначение(Заголовок,Путь);
       Сп.ДобавитьЗначение(ЗапускОО,Путь+"\LocalServer32\");
       Сп.ДобавитьЗначение("",Путь+"\NotInsertable\");
       Сп.ДобавитьЗначение(Стр+"."+Версия,Путь+"\ProgID\");
       Сп.ДобавитьЗначение("",Путь+"\Programmable\");
       Сп.ДобавитьЗначение(Стр,Путь+"\VersionIndependentProgID\");
       Путь=База+"\"+Стр;
       Сп.ДобавитьЗначение(Заголовок,Путь+"\");
       Сп.ДобавитьЗначение(КлассИд,Путь+"\CLSID\");
       Сп.ДобавитьЗначение(Стр+"."+Версия,Путь+"\CurVer\");
       Сп.ДобавитьЗначение("",Путь+"\NotInsertable\");
       Сп.ДобавитьЗначение(Заголовок,Путь+"."+Версия+"\");
       Сп.ДобавитьЗначение(КлассИд,Путь+"."+Версия+"\");
       Сп.ДобавитьЗначение("",Путь+"."+Версия+"\NotInsertable\");
       Для Сч=1 По Сп.РазмерСписка() Цикл
           Зн=Сп.ПолучитьЗначение(Сч,Стр);
           ШелСкрипт.RegWrite(Стр,Зн);
       КонецЦикла;
       Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
       Скрипт.language="javascript";
       Скрипт.Eval("
       |ПрототипМассива=Array.prototype;
       |ПрототипМассива.ПолучитьЗначение=function(x){return this[x-1]};
       |ПрототипМассива.УстановитьЗначение=function(x,y){this[x-1]=y;return this[x-1]};
       |ПрототипМассива.РазмерМассива=function(){return this.length};
       |УстановитьБулево=function(x){x.Value=Boolean(x.Value)};
       |Массив=new Array();");
       Это=Скрипт.Eval("this");
       Сообщить("file:///"+Это.encodeURI(СтрЗаменить(Файл.Path,"\","/")));
       СервисМанагер=СоздатьОбъект("com.sun.star.ServiceManager.OOPortable");
       Обновлялка=СервисМанагер.createInstance("com.sun.star.reflection.CoreReflection");
       Массив=Это.Массив;
       Обновлялка.forName("com.sun.star.beans.PropertyValue").createObject(Массив);
       Параметр=Массив.ПолучитьЗначение(1);
       Параметр.Name="Hidden";
       Параметр.Value=1;//Если 0 или любое пустое значение то Ложь, иначе Истина
       Это.УстановитьБулево(Параметр);
       Сообщить(Массив.ПолучитьЗначение(1).Value);;
       Десктоп = СервисМанагер.createInstance("com.sun.star.frame.Desktop");
       Док = Десктоп.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив );
   КонецЕсли;
   Сообщить(СервисМанагер);
КонецПроцедуры
10 andrewks
 
16.11.11
21:06
у либры класс также называется, это вы там чего-то намутили
попробуй ради проверки com.sun.star.ServiceManager.1
11 smaharbA
 
16.11.11
21:13
(10) такое встречалось и ранее
12 andrewks
 
16.11.11
21:18
(11) и какова причина?
13 megatrend
 
17.11.11
10:53
(2) (7) скачал-установил-запустил http://download.microsoft.com/download/win2000platform/oleview/1.00.0.1/nt5/en-us/oleview_setup.exe , но классов со ссылкой на исполняемые файлы Libre Office не обнаружил. Может, не там искал? Там много деревьев, а кнопки поиска вроде не нашёл.