Имя: Пароль:
1C
1C 7.7
v7: JavaScript. Попытка обратиться к файлу *.xls. Возвращает ошибку. [решено]
0 aka AMIGO
 
09.12.14
12:30
Вот такой код:
          Попытка
            scr = СоздатьОбъект("MSScriptControl.ScriptControl");
            scr.language = "javascript";
            scr.eval("MyArray=new Array()");
            ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
            scr.AddObject("ServiceManager",ServiceManager);
            scr.eval("MyArray[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
            scr.eval("MyArray[0].Name='Hidden'");
            scr.eval("MyArray[0].Value=true");
            Массив = scr.eval("MyArray");
            
            Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
            Document = Desktop.LoadComponentFromURL("file://localhost/"+СтрЗаменить(ЕхФайл,"\","/"), "_blank", 0, Массив);

            Листы = Document.getSheets();
            НашЛист = Листы.getByIndex(0);
        Исключение
            Сообщить("Ошибка при обращении к OpenOffice.");
            Возврат;    
        КонецПопытки;

На строке Document=... спотыкается и переходит в Исключение.

Немного подробностей:
"Спотыкается" на ПК с Win-7, установлен ОпенОффис 3.3
У меня, однако, этот кусок кода работает нормально, но Win-XP и установлен LibreOffice

В чем-же причина?
1 aka AMIGO
 
09.12.14
12:34
Или методика обращения не имеет отношения ни к OpenOffice, ни к LibreOffice, поскольку  scr.language = "javascript";
Чего нет на компе у юзера с его Win-7 и ОО?
2 aka AMIGO
 
09.12.14
12:37
Гуру, что открывается первой командой:
СоздатьОбъект("MSScriptControl.ScriptControl");
?

ЗЫ. возможно, надо взять какой-то мучебник и начать изучать язык..
3 Йохохо
 
09.12.14
12:37
так вроде работает
Функция ПреобразоватьВURL(ИмяФайла)
    Возврат "file:///" + СтрЗаменить(ИмяФайла, "", "/");
КонецФункции

    ДвоичныеДанные = ПолучитьМакет("Макет");
    ИмяВремФайла = ПолучитьИмяВременногоФайла(".odt");
    ДвоичныеДанные.Записать(ИмяВремФайла);
    
    Попытка
        scr = Новый COMОбъект("MSScriptControl.ScriptControl");
    Исключение
        Сообщить("Ошибка создания объекта MSScriptControl.ScriptControl");
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
    scr.language = "javascript";
    scr.eval("Massiv=new Array()");
    scr.AddCode("function SetItem(ind,val){Massiv[ind]=val}");
    Massiv = scr.eval("Massiv");
    
    Попытка
        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        Сообщить("Ошибка создания объекта com.sun.star.ServiceManager");
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
    scr.AddObject("ServiceManager", ServiceManager);
    
    Desktop        = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    Document    = Desktop.loadComponentFromURL(ПреобразоватьВURL(ИмяВремФайла), "_blank", 0, Massiv);
4 aka AMIGO
 
09.12.14
12:39
(3) Спасибо! сейчас поизучаю твой код

ЗЫ. нашел вот такой сайтик, вроде дело пишут ребята..
http://www.klerk.ru/soft/articles/22124/
5 Йохохо
 
09.12.14
12:45
разницца
"file://localhost/"+СтрЗаменить(ЕхФайл,"\","/")
"file:///" + СтрЗаменить(ИмяФайла, "", "/")
6 antoneus
 
09.12.14
12:46
(4) есть же прекрасный сайт на эту тему

http://script-coding.com/
7 exwill
 
09.12.14
12:48
(2) Открывается скрипт на языке javascript. Этот костыль необходим для того чтобы получить значение типа "массив".
В 1С массивов нет. Вот и приходится изгаляться.
8 aka AMIGO
 
09.12.14
13:10
(5) (6) - Спасибо, ребята.. Пробую.
(7) Ммм.. Понятно.. Но до полного понимания мне ой-ой, как далеко..
9 aka AMIGO
 
09.12.14
13:13
(5) Извини, мне непонятно, что заменяется в строке файла:
"file:///" + СтрЗаменить(ИмяФайла, "", "/") ?

может быть, так:
"file:///" + СтрЗаменить(ИмяФайла, "\", "/") ?
11 Йохохо
 
09.12.14
13:30
(9) копипаст рабочего кода из толстой восьмерки ОО, где то стырено без особой проверки, мб ошибка) буду иметь в виду
обратная функция на всякий случай
Функция ПреобразоватьВИмяФайла(URL)
    ИмяФайла = URL;
    ИмяФайла = СтрЗаменить(ИмяФайла, "file:///", "");
    ИмяФайла = СтрЗаменить(ИмяФайла, "%20", " ");
    ИмяФайла = СтрЗаменить(ИмяФайла, "/", "");
    Возврат ИмяФайла;
КонецФункции
12 aka AMIGO
 
09.12.14
13:55
(11) Угу.. логично.. Спасибо, друже!


А я нашел ошибку-несоответствие ХР и 7-ки:

Вот она, зараза.. Создал новую переменную
           МойФайл = СокрЛП(СтрЗаменить(ЕхФайл, "\", "/"));
И уж её вставляю в оператор:
Document = Desktop.LoadComponentFromURL("file:///" + МойФайл , "_blank", 0, Массив);

Вот, кто-б мог подумать, что пробелы в имени файла справа в 7-ке мешают?!?!
Однако!..