8.х Помогите пожалуйста открыть новый документ OpenOffice.org Writer из 1С 8.1.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ELLE, 18 янв 2010.

  1. TopicStarter Overlay
    ELLE
    Offline

    ELLE

    Регистрация:
    16 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Помогите, пожалуйста, открыть новый документ OpenOffice.org Writer из 1С 8.1.
    Есть форма документа с гиперссылкой "Открыть ОО". Всего то и требуется, открыть новый документ ОО.
    Я - человек не опытный в этом вопросе, но очень надо.
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    Код:
    Функция ConvertToUrl(ИмяФайла)
    Возврат "file:///" + СтрЗаменить(СтрЗаменить(ИмяФайла, " ", "%20"), "\", "/");
    КонецФункции // ConvertToUrl()
    
    Функция ПреобразоватьЗначениеЯчейкиOOoВ1С(OOoCell)
    Если OOoCell.Type = 2 Тогда
    // Это строка
    Возврат OOoCell.getString();
    ИначеЕсли OOoCell.Type = 3 Тогда
    // Это формула
    Возврат OOoCell.getFormula();
    Иначе
    // Это все остальное
    Возврат OOoCell.getValue();
    КонецЕсли; 
    КонецФункции
    
    Процедура ЗагрузитьТестИзФайла(ИмяФайлаТеста)
    Перем ВыбФайл, Args, OOДокумент;
    Попытка
    // Создадим сервис UNO
    ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    // Создадим объект oDesktop
    Если ServiceManager <> Неопределено Тогда
    oDesktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    КонецЕсли; 
    Если ServiceManager <> Неопределено
    И oDesktop <> Неопределено Тогда
    PropertyValue = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    PropertyValue.Name = "Hidden";
    PropertyValue.Value = Истина;
    Args = Новый COMSafeArray("VT_VARIANT", 1);
    Args.SetValue(0, PropertyValue);
    oDoc = oDesktop.loadComponentFromURL(ConvertToUrl(ИмяФайлаТеста), "_blank", 0, Args);
    Если oDoc <> Неопределено Тогда
    //SheetОтветы = OOДокумент.Sheets.getByName("Ответы");
    ПоследнийЛист = oDoc.getSheets().Count - 1;
    //Для i = 0 По ПоследнийЛист Цикл
    Для i = 0 По 0 Цикл
    oSheet = oDoc.Sheets.getByIndex(i);
    ИмяЛиста = oSheet.Name;
    Если ВРег(Лев(ИмяЛиста, СтрДлина("Вопрос"))) = ВРег("Вопрос") Тогда
    oCell = oSheet.GetCellbyPosition(0, 0);
    oCursor = oSheet.createCursorByRange(oCell);
    oCursor.GotoEndOfUsedArea(Истина);
    aAddress = oCursor.RangeAddress;
    ПоследняяСтрока = aAddress.EndRow - 1;
    ПоследняяКолонка = aAddress.EndColumn - 1;
    ВопросОтветы = "";
    Для НомерСтроки = 0 По ПоследняяСтрока Цикл
    Для НомерКолонки = 0 По ПоследняяКолонка Цикл
    OOoCell = oSheet.getCellByPosition(НомерКолонки, НомерСтроки);
    ТекстОтвета = ПреобразоватьЗначениеЯчейкиOOoВ1С(OOoCell);
    Если СокрЛП(ТекстОтвета) <> "" И СокрЛП(ТекстОтвета) <> "0" Тогда
    ВопросОтветы = ВопросОтветы + ?(СокрЛП(ВопросОтветы) <> "", Символы.ПС, "") + ТекстОтвета;
    КонецЕсли; 
    КонецЦикла; 
    КонецЦикла; 
    Если СокрЛП(ВопросОтветы) <> "" Тогда
    Сообщить(ВопросОтветы);
    КонецЕсли; 
    КонецЕсли; 
    КонецЦикла;
    
    oComponent = oDesktop.getCurrentComponent();
    oObjects = oComponent.getGraphicObjects();
    ПоследняяКартинка = oObjects.Count - 1;
    Для i = 0 По ПоследняяКартинка Цикл
    oObject = oObjects.getByIndex(i);
    КонецЦикла;
    
    //oTextGraphicObjects = ServiceManager.createInstance("com.sun.star.container.XNameAccess");
    //oCurrentComponent = oDesktop.currentComponent;
    //oGraphics = oDesktop.getCurrentComponent().getGraphicObjects();
    //ПоследняяКартинка = oGraphics.Count - 1;
    //
    //Для i = 0 По ПоследняяКартинка Цикл
    //	oObject = oGraphics.getByIndex(i);
    //КонецЦикла;
    oDoc.Close(Истина);
    КонецЕсли; 
    PropertyValue = Неопределено;
    КонецЕсли; 
    oDesktop = Неопределено;
    ServiceManager = Неопределено;
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
    КонецПроцедуры
    
    
  3. TopicStarter Overlay
    ELLE
    Offline

    ELLE

    Регистрация:
    16 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Открыть OpenOffice
    ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Reflection = ServiceManager.createInstance("com.sun.star.reflection.CoreReflection");
    Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    Broadcaster = ServiceManager.createInstance("com.sun.star.frame.GlobalEventBroadcaster");
    
    // Получить имя временного файла для хранения документа
    ИмяФайла = ПолучитьИмяВременногоФайла(".odt");
    
    // Создать новый документ
    Args = Новый COMSafeArray("VT_DISPATCH", 1);
    OOДокумент = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Args);
    // И сохранить его во временный файл
    OOДокумент.storeAsURL(ПреобразоватьВURL(ИмяФайла), Args);
    
    
    // Если документ открыт, активизировать его
    OOДокумент.getCurrentController().getFrame().getContainerWindow().setFocus();
    
    
    КонецПроцедуры
    
    
    
    // Функция преобразует Windows имя файла в URL OpenOffice
    Функция ПреобразоватьВURL(ИмяФайла)
    Возврат "file:///" + СтрЗаменить(ИмяФайла, "\", "/");
    КонецФункции
    
    Если кому-то интересно, вот что у меня получилось.
  4. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    впринципе вытаскивание текста из ячеек так же просто как из ворда, но вытащить картинку из Writer'a и засунуть ее в 1с'ку у меня так и не получилось, быть может представит кто пример? :unsure:

Поделиться этой страницей