Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Загрузка OpenOffice (http://forums.kuban.ru/f1040/zagruzka_openoffice-5497642.html)

Sasha 13.03.2014 08:59

Загрузка OpenOffice
 
Добрый день,
для загрузки из XLS используется общепринятая конструкция
[code] ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
scr.AddObject("ServiceManager",ServiceManager);
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Document = Desktop.LoadComponentFromURL("file:///"+Файл, "_blank", 0, Массив);[/code]
При этом программное приложение Оо открывается в видимом режиме. Возможен ли запуск в скрытом режиме (условие запускать под другим пользователем пока не рассматриваем)

user1C 13.03.2014 09:29

[url]http://www.sql.ru/forum/1047728/sozdat-nevidimyy-openofficecalc-analog-xlapp-application-visible-false[/url]
другие инструменты для чтения xls не пробовали?

real 13.03.2014 10:21

Неужто в гугле забанили ....
Первая ссылка по словам loadcomponentfromurl hidden

nordbox 13.03.2014 10:58

(0) Не хочу обидеть............одни вопли слюни,подари мне дворники для монитора(а то забанят)
недавно писал

nordbox 13.03.2014 11:02

+3 открой букварь([url]http://help1c.com/faq8.html[/url])
модераторов прошу не ругаться,это не реклама

economist 14.03.2014 09:50

Используя COM - невозможно загрузить OpenOffice/LibreOffice в скрытом режиме. Это возможно только при использовании [filolog][filolog][filolog]UNO[/filolog][/filolog][/filolog]. В целом возможностей при работе через COM примерно на 30% меньше, чем через [filolog][filolog][filolog]UNO[/filolog][/filolog][/filolog].

В LibreOffce 4.2 анонсирована новое API, как замена труднопонятного [filolog][filolog][filolog]UNO[/filolog][/filolog][/filolog] и недофункционального COM. Еще не тестил.

vah1 14.03.2014 10:02

5-economist > я вот тоже пифка купил часиков в 8-00, оказалось и это фикня, в сравнении с твоими советами

economist 14.03.2014 10:02

Кхм, под [*****]-->[*****]-->[*****] скрывается
невинное слово U N O (универсальный сетевой объект, УНО)

vah1 14.03.2014 10:07

(7) талбаеп?
ЗЫ ты наш человек

economist 14.03.2014 10:11

8 - Предсказуемо...

vah1 14.03.2014 10:18

9-economist > не завидуй. пивка взял, рыбка есть - чего и всем оставшимся чесслово желаю

smaharbA 14.03.2014 23:04

пан директор == баран ?

При Создателе хоть не пиши свой бред.

smaharbA 14.03.2014 23:06

автор все давно украдено, код в сабже устарел лет на 10 примерно, говорю как Автор всех связок ООО и 1С.

smaharbA 14.03.2014 23:10

разбирайся с древней болванкой (не важно, то таблицы)

//*******************************************
Функция ПолучитьОбертку()
ХТМЛ = СоздатьОбъект("htmlfile");
ХТМЛ.Open("text/html");
//<-- Подготовим нужные методы
ХТМЛ.Write("<script>
|var ХТМЛ;
|ПолучитьЗначение=function(x,y){return x.constructor == Array ? x[y] : x**;
|УстановитьЗначение=function(x,y,z){x[y]=z**;
|РазмерМассива=function(x){return x.length**;
|УстановитьБулево=function(x){x.Value=Boolean(x.Value)**;
|Массив=function(x){return new Array(x)**;
|</script>");
Док=ХТМЛ.documentElement.document;
// Внедрение объекта Скрипта в самого себя, для сохранности контекста
Док.script.ХТМЛ=ХТМЛ;
// Все подготовке -->
Возврат Док.script;
КонецФункции // ПолучитьОбертку(Это)

Функция Цвет(Красный=0,Зеленый=0,Синий=0)
Возврат (Красный*65536)+(Зеленый*256)+Синий;
КонецФункции // Цвет(Красный=0,Зеленый=0,Синий=0)

Функция ОпенОфис(Файл="")
Это=ПолучитьОбертку();
//УРЛ="file:///"+Это.encodeURI(СтрЗаменить(Файл,"\","/"));
СервисМанагер=СоздатьОбъект("com.sun.star.ServiceManager");
Обновлялка=СервисМанагер.createInstance("com.sun.star.reflection.CoreReflection");
Проводник=СервисМанагер.createInstance("com.sun.star.ucb.FileContentProvider");
УРЛ=Проводник.getFileURLFromSystemPath("",Файл);
Сообщить(УРЛ);
Массив=Это.Массив(0);
Параметр=Это.Массив(0);
Для Сч=0 По 1 Цикл
Обновлялка.forName("com.sun.star.beans.PropertyValue").createObject(Параметр);
Это.УстановитьЗначение(Массив,Сч,Это.ПолучитьЗначение(Параметр,0));
КонецЦикла;

Параметр=Это.ПолучитьЗначение(Массив,0);
Параметр.Name="Hidden";
Параметр.Value=0;//Если 0 или любое пустое значение то Ложь, иначе Истина
Это.УстановитьБулево(Параметр);

Параметр=Это.ПолучитьЗначение(Массив,1);
Параметр.Name="Password";
Параметр.Value="123";

Для Сч=0 По Это.РазмерМассива(Массив)-1 Цикл
Сообщить(Это.ПолучитьЗначение(Массив,Сч).Name);
Сообщить(Это.ПолучитьЗначение(Массив,Сч).Value);
КонецЦикла;

Десктоп = СервисМанагер.createInstance("com.sun.star.frame.Desktop");
//Док = Десктоп.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив );
Док = Десктоп.LoadComponentFromURL(УРЛ, "_blank", 0, Массив );
ИмяЗакладки="Закладка1";
Текст=Док.getText();
Контроллер=Док.CurrentController;
Курсор=Контроллер.getViewCursor();
Закладки=Док.getBookmarks();
Попытка
Закладка=Закладки.getByName(ИмяЗакладки);
Исключение
Сообщить("Фигня какая то с закладкой """+ИмяЗакладки+"""!!!");
Возврат(1);
КонецПопытки;
Якорь=Закладка.getAnchor();
Курсор.gotoRange(Якорь, 0);

//Курсор.CharColor=Цвет(255,0,0);
//Курсор.CharBackColor=Цвет(0,255,0);
//Курсор.CharFontName="Times New Roman";
//Курсор.CharHeight=48;

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Товар");
ТЗ.НоваяКолонка("Количество");
ТЗ.НоваяКолонка("Цена");
ТЗ.НоваяКолонка("Сумма");
ТЗ.НоваяСтрока();
ТЗ.Товар = "Носки";
ТЗ.Количество = 1;
ТЗ.Цена = 20;
ТЗ.Сумма = ТЗ.Цена * ТЗ.Количество;
ТЗ.НоваяСтрока();
ТЗ.Товар = "Трусы";
ТЗ.Количество = 1;
ТЗ.Цена = 100;
ТЗ.Сумма = ТЗ.Цена * ТЗ.Количество;
ТЗ.НоваяСтрока();
ТЗ.Товар = "Броник";
ТЗ.Количество = 1;
ТЗ.Цена = 200;
ТЗ.Сумма = ТЗ.Цена * ТЗ.Количество;
//ТаблицаООО=Док.createInstance("com.sun.star.text.TextTable");
//ТаблицаООО.initialize(ТЗ.КоличествоСтрок()+1,ТЗ.КоличествоКолонок());
////Текст.insertString(Курсор, "Тут была закладка """+ИмяЗакладки+"""", 0 );
//Текст.insertTextContent(Курсор,ТаблицаООО,0);
//Для Кол=1 По ТЗ.КоличествоКолонок() Цикл
// Ячейка=ТаблицаООО.getCellByPosition(Кол-1,0);
// Ячейка.getText().setString(""+ТЗ.ПолучитьПараметрыКолонки(Кол));
//КонецЦикла;
Стр="";
Для Сч=1 По ТЗ.КоличествоСтрок() Цикл
Для Кол=1 По ТЗ.КоличествоКолонок() Цикл
//Ячейка=ТаблицаООО.getCellByPosition(Кол-1,Сч);
//Ячейка.getText().setString(""+ТЗ.ПолучитьЗначение(Сч,Кол));
Стр=Стр+""+ТЗ.ПолучитьЗначение(Сч,Кол)+Симв(9);
//Курсор.setString(""+ТЗ.ПолучитьЗначение(Сч,Кол)+Симв(9));
//Курсор.gotoEnd(0);
КонецЦикла;
Стр=Стр+Симв(10);
//Курсор.getText().insertControlCharacter(Курсор.End,0,0);
КонецЦикла;
Якорь.setString(Стр);
Возврат 0;
//Сообщить(Текст.getString(Якорь.getStart(),Якорь.getEnd()));
Перейти ~М1;
Листы=Док.getSheets();
Лист=Листы.getByIndex(0);
Курсор=Лист.createCursor();
Курсор.gotoStartOfUsedArea(0);
Курсор.gotoEndOfUsedArea(-1);
Адреса=Курсор.getRangeAddress();
Диапазон=Лист.getCellRangeByPosition(Адреса.StartColumn,Адреса.StartRow,Адреса.EndColumn,Адреса.EndRow);
Поиск=Диапазон.createSearchDescriptor();
Поиск.SearchRegularExpression = -1;
Поиск.SearchString = ".+";
Рез=Диапазон.findAll(Поиск);
Всего=Рез.getCount();
Начало=Рез.getByIndex(0).getRangeAddress();
Конец=Рез.getByIndex(Всего-1).getRangeAddress();
ДиапазонДанных=Диапазон.getSpreadsheet().getCellRangeByPosition(Начало.StartColumn, Начало.StartRow,Конец.EndColumn,Конец.EndRow);
Для С=1 По ДиапазонДанных.getRows().getCount() Цикл
Стр="";
Для К=1 По ДиапазонДанных.getColumns().getCount() Цикл
Стр=Стр+"; "+ДиапазонДанных.getCellByPosition(К-1,С-1).getText().String();
КонецЦикла;
Сообщить(Стр);
КонецЦикла;
~М1:
Массив=Это.Массив(0);
Обновлялка.forName("com.sun.star.beans.PropertyValue").createObject(Параметр);
Это.УстановитьЗначение(Массив,0,Это.ПолучитьЗначение(Параметр,0));

Параметр.Name="Wait";
Параметр.Value=-1;//Если 0 или любое пустое значение то Ложь, иначе Истина
Это.УстановитьБулево(Параметр);
Для Сч=0 По Это.РазмерМассива(Массив)-1 Цикл
Сообщить(Это.ПолучитьЗначение(Массив,Сч).Name);
Сообщить(Это.ПолучитьЗначение(Массив,Сч).Value);
КонецЦикла;
Док.Print(Массив);
//Предупреждение("Печать ?");
//Док.Close(-1);
//Десктоп.Terminate();
КонецФункции

//*******************************************
Процедура Сформировать()
Перем Имя,Путь;
Если ФС.ВыбратьФайл(0,Имя,Путь,"","Файлы офиса|*.ods;*.xls;*.odt;*.doc","*")=0 Тогда
Возврат;
КонецЕсли;
ОпенОфис(Путь+Имя);
КонецПроцедуры

//


Текущее время: 14:22. Часовой пояс GMT +3.