|
Выгрузка в OpenOffice | ☑ | ||
---|---|---|---|---|
0
ЯЧайник
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
|
Данный код пишу в обычных формах (УПП), в модуле объекта (Обработки)
|
|||
5
don_Rumata
17.07.18
✎
12:03
|
У меня функция преобразования выглядит так:
// Функция преобразует Windows имя файла в URL OpenOffice Функция ПреобразоватьВURL(ИмяФайла) Возврат "file:///" + СтрЗаменить(ИмяФайла, "\", "/"); КонецФункции |
|||
6
spectre1978
17.07.18
✎
12:04
|
ну вроде почти по-русски же пишет что урл кривой. Попробуйте написать путь к файлу как-то по-другому.
|
|||
7
ЯЧайник
17.07.18
✎
12:06
|
Попробую еще раз другие варианты формата УРЛ,но,мне кажется,что я уже как только не пробовала его писать...
|
|||
8
spectre1978
17.07.18
✎
12:09
|
может не дружить с кириллицей, например
|
|||
9
spectre1978
17.07.18
✎
12:09
|
попробуйте использовать в пути и имени файла только латинские буквы
|
|||
10
ЯЧайник
17.07.18
✎
12:20
|
(5) не меняет ситуацию
|
|||
11
ЯЧайник
17.07.18
✎
12:20
|
(9) да,тоже думала, а потом забыла попробовать. сейчас попробую
|
|||
12
spectre1978
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)
|
|||
18
spectre1978
17.07.18
✎
13:06
|
(16) попробуйте localhost/ убрать из латинского пути
|
|||
19
ЯЧайник
17.07.18
✎
13:17
|
пробовала как в (5), не получается
|
|||
20
spectre1978
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); и не парить себе мозг... |
|||
26
spectre1978
17.07.18
✎
15:12
|
(25) вам решать. Мы же не знаем, зачем вам именно OOo. Возможно, у вас что-то не сохраняется средствами 1С, она не все и не всегда корректно может сохранить в XLS.
|
|||
27
ЯЧайник
17.07.18
✎
15:34
|
(26) согласна
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |