Вход | Регистрация



Выгрузка в OpenOffice

Выгрузка в OpenOffice
Я
   ЯЧайник
 
17.07.18 - 11:55
Добрый день! платформа 8.3.10.2772 толстый клиент. Пробую писать выгрузку в openOffice так как Excel не установлен. Взяла из интернета примерный алгоритм. Выдает следующую ошибку:
Ошибка при вызове метода контекста (LoadComponentFromURL)
Doc=Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ("D:\Антонина\ВыгрузкиМатериалы\123.ods"), "_blank", 0, Args);
по причине:
Произошла исключительная ситуация ([automation bridge] ): com.sun.star.lang.IllegalArgumentException: Unsupported URL <file://localhost/D:/Антонина/ВыгрузкиМатериалы/123.ods>: "type detection failed"
 
 
   ЯЧайник
 
1 - 17.07.18 - 11:59
мой код
Попытка
        OpenOffice = Новый ComОбъект("com.sun.star.ServiceManager");// Создаем СОМ-объект

    Исключение
        Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!");
        Возврат;
    КонецПопытки;
    Desktop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");// Создаем Desktop

Args = Новый COMSafeArray("VT_VARIANT", 3);
    Свойства = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства.Name = "AsTemplate";
    Свойства.Value = Истина;
    Args.SetValue(0, Свойства);
    
    Свойства1 = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства1.Name = "Hidden";
    Свойства1.Value = Истина;
    Args.SetValue(1, Свойства1);
Doc = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ("D:\Антонина\ВыгрузкиМатериалы\123.ods"), "_blank", 0, Args);
    Sheets = Doc.getSheets();
    Sheet = Sheets.getByIndex(0);// Открываем первый лист по индексу


    мИтКол = 0;
Для каждого кол из ТЗ.Колонки Цикл
        Sheet.getCellByPosition(мИтКол,0).setString(кол.Имя);
        
        мИтКол = мИтКол + 1;
    КонецЦикла;
ВсегоСтрок = ТЗ.Количество();
    ВсегоКолонок = ТЗ.Колонки.Количество();
    МассивКОМ = Новый COMSafeArray("VT_VARIANT", ВсегоСтрок,ВсегоКолонок);
    
    иткол = 0;
    итстр = 0;
Для каждого стр из ТЗ Цикл
        Для каждого кол из ТЗ.Колонки Цикл
            стрРез = СокрЛП(стр[кол.Имя]);
            МассивКОМ.SetValue(итстр,иткол,стрРез);
            
            иткол = иткол+1;
         КонецЦикла;
        
        иткол = 0;
        итстр = ?(итстр=ВсегоСтрок,0,итстр+1);
    КонецЦикла;
begCol = 0;
    begRow = 1;
    endCol = ВсегоКолонок-1;
    endRow = ВсегоСтрок;
    Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow);
    Range.setDataArray(МассивКОМ);
    
    Doc.storeToURL(ПривестиФайлКУРЛ("D:\Антонина\ВыгрузкиМатериалы\123.odt"),Args);
Свойства2 = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства2.Name = "FilterName";
    Свойства2.Value = "MS Excel 97";
    Args.SetValue(2,Свойства2);
Doc.storeToURL(ПривестиФайлКУРЛ("D:\Антонина\ВыгрузкиМатериалы\123.odt"),Args);
Doc.close(true);
    Desktop.terminate();
   ЯЧайник
 
2 - 17.07.18 - 12:00
Функция ПривестиФайлКУРЛ(ПутьКФайлу)

    ПутьКФайлу = СтрЗаменить(ПутьКФайлу," ","%20");
    ПутьКФайлу = СтрЗаменить(ПутьКФайлу,"\","/");
    Возврат "file:/" + "/localhost/" + ПутьКФайлу;

Конецфункции
   ЯЧайник
 
3 - 17.07.18 - 12:01
Подскажите,пожалуйста,умные люди, в чём может быть причина данной ошибки?
   ЯЧайник
 
4 - 17.07.18 - 12:03
Данный код пишу в обычных формах (УПП), в модуле объекта (Обработки)
   don_Rumata
 
5 - 17.07.18 - 12:03
У меня функция преобразования выглядит так:

// Функция преобразует Windows имя файла в URL OpenOffice                      

Функция ПреобразоватьВURL(ИмяФайла)   
    
    Возврат "file://" + СтрЗаменить(ИмяФайла, "\", "/"); 

    
КонецФункции
   spectre1978
 
6 - 17.07.18 - 12:04
ну вроде почти по-русски же пишет что урл кривой. Попробуйте написать путь к файлу как-то по-другому.
   ЯЧайник
 
7 - 17.07.18 - 12:06
Попробую еще раз другие варианты формата УРЛ,но,мне кажется,что я уже как только не пробовала его писать...
   spectre1978
 
8 - 17.07.18 - 12:09
может не дружить с кириллицей, например
   spectre1978
 
9 - 17.07.18 - 12:09
попробуйте использовать в пути и имени файла только латинские буквы
   ЯЧайник
 
10 - 17.07.18 - 12:20
(5) не меняет ситуацию
 
 Рекламное место пустует
   ЯЧайник
 
11 - 17.07.18 - 12:20
(9) да,тоже думала, а потом забыла попробовать. сейчас попробую
   spectre1978
 
12 - 17.07.18 - 12:23
что-то отличное от латиницы в URLах - это вообще очень специфическая и непростая тема. Непонятно как ее опенофис разруливает и разруливает ли вообще.
   ЯЧайник
 
13 - 17.07.18 - 12:28
com.sun.star.lang.IllegalArgumentException: Unsupported URL <file://localhost/D:/123.ods>: "type detection failed"
   Черный маклер
 
14 - 17.07.18 - 12:32
(0) простых путей как сохранить ТабличныйДокумент в ods совсем не признаешь ?
   ПегийЛунь
 
15 - 17.07.18 - 12:32
   ЯЧайник
 
16 - 17.07.18 - 12:32
com.sun.star.lang.IllegalArgumentException: Unsupported URL <file://localhost/D:/upps.xls>: "type detection failed"
   ЯЧайник
 
17 - 17.07.18 - 12:41
(15) у меня в (2) такая же функция точь в точь, как в решении проблемы по ссылке из (15)
   spectre1978
 
18 - 17.07.18 - 13:06
(16) попробуйте localhost/ убрать из латинского пути
   ЯЧайник
 
19 - 17.07.18 - 13:17
пробовала как в (5), не получается
   spectre1978
 
20 - 17.07.18 - 13:33
(19) а с правами проблем не может быть? В (15) очень похожая проблема описана, используют временный файл, потом переносят
   ЯЧайник
 
21 - 17.07.18 - 13:34
возможно. сейчас рассматриваю запись во временный файл
   ЯЧайник
 
22 - 17.07.18 - 14:42
ТабДокумент = Новый ТабличныйДокумент;
    
    Макет = ЭтотОбъект.ПолучитьМакет("Материалы");
    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабДокумент.Вывести(Заголовок);
    
    Для каждого стр из ТЗ Цикл
        СтрокаМатериал = Макет.ПолучитьОбласть("Строка");
        ЗаполнитьЗначенияСвойств(СтрокаМатериал.Параметры,Стр);
        ТабДокумент.Вывести(СтрокаМатериал);
        
    КонецЦикла;

    // Открыть OpenOffice 

    Попытка 
        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); 
    Исключение 
        Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!");
        Возврат;     
    КонецПопытки; 
    
    ВременныйФайл =ПолучитьИмяВременногоФайла();
    ВременныйФайлXLS = ПолучитьИмяВременногоФайла("xls");
    ВременныйФайлXLS1 = СтрЗаменить(ВременныйФайлXLS,".xls","")+"1.xls"; 
    
    ТабДокумент.Записать(ВременныйФайлXLS,ТипФайлаТабличногоДокумента.XLS97); 
      
    Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");     

    НастройкиОткрытия = Новый COMSafeArray("VT_VARIANT", 1); 
    PropertyValue = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");   
    PropertyValue.Name = "Hidden"; 
    PropertyValue.Value = Истина; 
    НастройкиОткрытия.SetValue(0, PropertyValue); 
   
    ВременныйФайлXLS_какУРЛ = ПривестиФайлКУРЛ(ВременныйФайлXLS);
    //"file:///" + СтрЗаменить(ВременныйФайлXLS, "\", "/"); // приводим путь к файлу из виндового формата в опен офисный 

    ВременныйФайлXLS1_какУРЛ = ПривестиФайлКУРЛ(ВременныйФайлXLS1);
    //"file:///" + СтрЗаменить(ВременныйФайлXLS1, "\", "/");  

    // Откроем файл в опене офисе 

    ОпенОфис = Desktop.LoadComponentFromURL(ВременныйФайлXLS_какУРЛ, "_blank", 0, НастройкиОткрытия); 
    
    НастройкиСохранения = Новый COMSafeArray("VT_VARIANT", 1);
    Свойства2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства2.Name = "FilterName";
    Свойства2.Value = "MS Excel 97";
    НастройкиСохранения.SetValue(0,Свойства2);
      
    //ВременныйФайлPDF_какУРЛ = "file:///" + СтрЗаменить(ВременныйФайлPDF, "\", "/"); // приводим путь к файлу из виндового формата в опен офисный 

    ОпенОфис.storeToURL(ВременныйФайлXLS1_какУРЛ, НастройкиСохранения);// сохранили PDF файл 

    ОпенОфис.close(-1); 
    ОпенОфис = Неопределено;
   ЯЧайник
 
23 - 17.07.18 - 14:43
ну,вроде, как-то так
   ЯЧайник
 
24 - 17.07.18 - 14:51
спасибо за подсказки
   ЯЧайник
 
25 - 17.07.18 - 15:03
хотя,наверное,можно было ограничиться
ТабДокумент = Новый ТабличныйДокумент;
    
    Макет = ЭтотОбъект.ПолучитьМакет("Материалы");
    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабДокумент.Вывести(Заголовок);
    
    Для каждого стр из ТЗ Цикл
        СтрокаМатериал = Макет.ПолучитьОбласть("Строка");
        ЗаполнитьЗначенияСвойств(СтрокаМатериал.Параметры,Стр);
        ТабДокумент.Вывести(СтрокаМатериал);
        
    КонецЦикла;

    ТабДокумент.Записать("D:\Антонина\ВыгрузкиМатериалы\123.xls",ТипФайлаТабличногоДокумента.XLS97); 

и не парить себе мозг...
   spectre1978
 
26 - 17.07.18 - 15:12
(25) вам решать. Мы же не знаем, зачем вам именно OOo. Возможно, у вас что-то не сохраняется средствами 1С, она не все и не всегда корректно может сохранить в XLS.
   ЯЧайник
 
27 - 17.07.18 - 15:34
(26) согласна


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