Имя: Пароль:
1C
1С v8
1C И OpenOffice
0 Сергей-88
 
02.12.11
10:59
Подскажите код как работаь с опен офисом из 1с, для загрузки прайса?
1 Ковычки
 
02.12.11
11:05
Как то так

Функция СоздатьОбъект(Стр="")
   Возврат Новый COMОбъект(Стр);
КонецФункции

//*******************************************
Функция ПолучитьОбертку()
   ХТМЛ = СоздатьОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   //<-- Подготовим нужные методы
   ХТМЛ.Write("<script type='text/javascript'>
   |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(){return new Array()};
   |</script>");
   Док=ХТМЛ.documentElement.document;
   // Внедрение объекта Скрипта в самого себя, для сохранности контекста
   Док.script.ХТМЛ=ХТМЛ;
   // Все подготовке -->
   Возврат Док.script;
КонецФункции    // ПолучитьОбертку(Это)

Функция ОпенОфис(Файл="")
   Перем Параметр;
   Это=ПолучитьОбертку();
   //УРЛ="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;
   Листы=Док.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();
   //createSearchDescriptor
КонецФункции

//*******************************************
Процедура Сформировать()
   Перем Имя,Путь;
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Заголовок = "Выберите файл";
   Диалог.ПолноеИмяФайла = "";
   Диалог.ПредварительныйПросмотр = Истина;
   Диалог.Фильтр = "Файлы офиса|*.ods;*.xls;*.odt;*.doc";
   Если Не Диалог.Выбрать() Тогда
       Возврат;
   КонецЕсли;
   ОпенОфис(Диалог.ПолноеИмяФайла);
КонецПроцедуры
2 Сергей-88
 
02.12.11
11:17
спаисбо, но мне нужно для 8.2, хотя эту можно переделать..не могу в коде разобраться....
3 Ковычки
 
02.12.11
11:43
(2) это именно на 8.2
4 эцп
 
02.12.11
11:55
(3) > ХТМЛ = СоздатьОбъект("htmlfile");
На 8.2?
5 Ковычки
 
02.12.11
11:57
(4) да
6 Я не курил
 
02.12.11
11:59
(4) читай код внимательнее - там есть:
Функция СоздатьОбъект(Стр="")
   Возврат Новый COMОбъект(Стр);
КонецФункции
7 Кокос
 
02.12.11
11:59
TOpenOffice использовать можешь :)
8 эцп
 
02.12.11
12:09
(6) Ага, вижу. А сделать Ctrl+H с "СоздатьОбъект" на "Новый COMОбъект" разве проблема?
Программист всегда исправляет последнюю ошибку.