|   |   | 
| 
 | 1С и LibreOffice | ☑ | ||
|---|---|---|---|---|
| 0
    
        kalisto 12.08.14✎ 23:37 | 
        Доброго времени суток.
 Подскажите плиз, как правильно обратиться к LibreOffice. Мне нужно данные из ТЧ документа выгрузить в файл xls. А на серваке стоит либерти. | |||
| 1
    
        Alexor 12.08.14✎ 23:46 | 
        А платформа какая?     | |||
| 2
    
        Поpyчик-4 12.08.14✎ 23:51 | 
        (0) Так же как к OpenOffice
 Создание объекта Excel.Application в OpenOffice | |||
| 3
    
        kalisto 12.08.14✎ 23:51 | 
        1C - 8.2.19.83
 LibreOffice - dthcbz 3.6.1.2 | |||
| 4
    
        kalisto 12.08.14✎ 23:51 | 
        * версия     | |||
| 5
    
        Defender aka LINN 12.08.14✎ 23:55 | 
        (0) А разница, что стоит на сервере? От этого параметры метода "Записать" меняются, что ли?     | |||
| 6
    
        Alexor 12.08.14✎ 23:58 | 
        +5 Кстати да. Я думал загружать надо     | |||
| 7
    
        kalisto 13.08.14✎ 00:00 | 
        и загружать тоже потом надо будет     | |||
| 8
    
        Defender aka LINN 13.08.14✎ 00:08 | 
        (7) Ну вот с этого и начинать надо было :)
 http://api.libreoffice.org/examples/examples.html#OLE_examples | |||
| 9
    
        GreatOne 13.08.14✎ 00:46 | 
        Есть вот такое:
     Функция мПрочитатьТабличныйДокументИзOpenOffice(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
 | |||
| 10
    
        kalisto 13.08.14✎ 01:47 | 
        (9) Классно. Спасибо. Если бы у вас еще был такой же пример для выгрузки в файл...     | |||
| 11
    
        GreatOne 13.08.14✎ 02:20 | 
        (10)OpenOffice пример выгрузки в формат Excel (зарплата на карту Альфа-Банка)
 Хороший пример, там весь код OO с пояснениями. Склеить в единое целое "ТекстКода" и будет понятнее, а то шелухи много. | |||
| 12
    
        GreatOne 13.08.14✎ 02:21 | 
        я бы даже сказал пример вообще зачетный. Ставлю себе закладку)     | |||
| 13
    
        Злопчинский 13.08.14✎ 02:23 | 
        а что - там суперспецифичные для экселя особенности используются? тупо сформировать макет и программно сохранить в эксель - не прокатит..?     | |||
| 14
    
        МастерВопросов 13.08.14✎ 06:25 | 
        (10) Процедура КнопкаВыполнитьНажатие(Кнопка)
 Перем РезультатЗапроса, СписокТиповЦен; ВыполнитьЗапросПостроителя(РезультатЗапроса, СписокТиповЦен); //Прочитать файл из макета 1С ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xls"); МакетПрайса = ПолучитьМакет("ШаблонПрайсаXLS"); МакетПрайса.Записать(ИмяВременногоФайла); ИмяФайлаОО = СтрЗаменить(ИмяВременногоФайла," ","%20"); ИмяФайлаОО = СтрЗаменить(ИмяФайлаОО,"\","/"); OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager"); scr = Новый COMОбъект("MSscriptControl.scriptControl"); scr.language = "javascript"; scr.eval("MassivParametrov = new Array()"); MassivParametrov = scr.eval("MassivParametrov"); scr.AddObject("OpenOffice", OpenOffice); scr.eval("MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrov[0].Name='Hidden'"); scr.eval("MassivParametrov[0].Value=true"); Desktop = OpenOffice.createInstance("com.sun.star.frame.Desktop"); ФайлОбмена = Desktop.LoadComponentFromURL("file:///"+СокрЛП(ИмяФайлаОО), "_blank", 0, MassivParametrov); //Чтение //ТекущийЛист = ФайлОбмена.sheets.getByIndex(НомерЛиста); //КоличествоСтрокНаЛисте = ТекущийЛист.rows.count - 1; //Для НомерСтроки = 0 По КоличествоСтрокНаЛисте Цикл // //Для НомерЛиста = 0 По ФайлОбмена.sheets.count - 1 Цикл //ДеньСобытия1 = ТекущийЛист.getCellByPosition(1, НомерСтроки).Value; //КонецЦикла; //КонецЦикла; //Запись ТекущийЛист = ФайлОбмена.sheets.getByIndex(1); Состояние("Заполняем: "+ТекущийЛист.Name); НомерКолонки = 4; Для каждого СтрСписокТиповЦен Из СписокТиповЦен Цикл ТекущийЛист.getCellByPosition(НомерКолонки,1).string = СокрЛП(СтрСписокТиповЦен); //ТекущийЛист.Cell(НомерКолонки,1).Range.Font.Bold = 0; //ТекущийЛист.getCellByPosition(НомерКолонки,1).Size = 9; ТекущийЛист.getCellByPosition(НомерКолонки,2).string = "Цена"; ТекущийЛист.getCellByPosition(НомерКолонки+1,2).string = "Ед."; Диапазон = ТекущийЛист.getCellRangeByPosition(НомерКолонки,1,НомерКолонки+1,1); Диапазон.Merge(ИСТИНА); //Объединение ячеек НомерКолонки = НомерКолонки + 2; КонецЦикла; //**** Начало работы с бордюром Диапазон = ТекущийЛист.getCellRangeByPosition(1,1,НомерКолонки-1,2); ЛинияБордюра = scr.eval("OpenOffice.Bridge_GetStruct('com.sun.star.table.BorderLine')"); ЛинияБордюра.OuterLineWidth = 35; ЛинияБордюра.InnerLineWidth = 0; ЛинияБордюра.Color = 0; Бордюр = Диапазон.TableBorder; Бордюр.IsTopLineValid = 1; Бордюр.IsBottomLineValid = 1; Бордюр.IsLeftLineValid = 1; Бордюр.IsRightLineValid = 1; Бордюр.IsHorizontalLineValid = 1; Бордюр.IsVerticalLineValid = 1; Бордюр.TopLine = ЛинияБордюра; Бордюр.BottomLine = ЛинияБордюра; Бордюр.LeftLine = ЛинияБордюра; Бордюр.RightLine = ЛинияБордюра; Бордюр.HorizontalLine = ЛинияБордюра; Бордюр.VerticalLine = ЛинияБордюра; Диапазон.TableBorder = Бордюр; Диапазон.CharWeight = 150; // Жирный Диапазон.CharHeight = 9; //Центрирование 2 / 3 / 1 Диапазон.ParaAdjust = 3; //Sheet2.getCellRangeByName(""A1:B1"").CharWeight = 100 // Normal //**** Конец работы с бордюром Выборка = РезультатЗапроса.Выбрать(); НомерСтроки = 2; ТекНоменклатура = ""; Пока Выборка.Следующий() Цикл Если Выборка.Цена <> NULL Тогда Если ТекНоменклатура = Выборка.Ссылка Тогда Иначе //НомерСтроки = ТекущийЛист.rows.count; НомерСтроки = НомерСтроки + 1; //Сообщить(СтрЗаменить(Формат(Выборка.Цена,"ЧЦ=15; ЧДЦ=2; ЧРД=."),Символы.НПП,"")); ТекущийЛист.getCellByPosition(1,НомерСтроки).string = СокрЛП(Выборка.Код); ТекущийЛист.getCellByPosition(2,НомерСтроки).string = СокрЛП(Выборка.Артикул); ТекущийЛист.getCellByPosition(3,НомерСтроки).string = СокрЛП(Выборка.НаименованиеПолное); ТекНоменклатура = Выборка.Ссылка; КонецЕсли; //выводим тип цен ИндексТипаЦены = СписокТиповЦен.Найти(Выборка.ТипЦен); Если ИндексТипаЦены <> Неопределено Тогда ИндексТипаЦены = ((ИндексТипаЦены+1)*2); //Если ВыводитьКолонкуБренд Тогда // ИндексТипаЦены = ИндексТипаЦены +1; //КонецЕсли; ТекущийЛист.getCellByPosition(2+ИндексТипаЦены,НомерСтроки).string = Формат(Выборка.Цена,"ЧЦ=15; ЧДЦ=2; ЧРД=."); ТекущийЛист.getCellByPosition(3+ИндексТипаЦены,НомерСтроки).string = СокрЛП(Выборка.ЕдиницаИзмерения); КонецЕсли; КонецЕсли; КонецЦикла; НомерКолонки = 4; Для каждого СтрСписокТиповЦен Из СписокТиповЦен Цикл Диапазон = ТекущийЛист.getCellRangeByPosition(НомерКолонки,3,НомерКолонки,НомерСтроки); //Центрирование 2 / 3 / 1 Диапазон.ParaAdjust = 1; Диапазон.CharWeight = 150; // Жирный Диапазон = ТекущийЛист.getCellRangeByPosition(НомерКолонки+1,3,НомерКолонки+1,НомерСтроки); Диапазон.ParaAdjust = 3; НомерКолонки = НомерКолонки + 2; КонецЦикла; //**** Начало работы с бордюром //Диапазон = ТекущийЛист.getCellRangeByName("B4:F"+СокрЛП(НомерСтроки+1)); Диапазон = ТекущийЛист.getCellRangeByPosition(1,3,НомерКолонки-1,НомерСтроки); ЛинияБордюра = scr.eval("OpenOffice.Bridge_GetStruct('com.sun.star.table.BorderLine')"); ЛинияБордюра.OuterLineWidth = 25; ЛинияБордюра.InnerLineWidth = 0; ЛинияБордюра.Color = 0; Бордюр = Диапазон.TableBorder; Бордюр.IsTopLineValid = 1; Бордюр.IsBottomLineValid = 1; Бордюр.IsLeftLineValid = 1; Бордюр.IsRightLineValid = 1; Бордюр.IsHorizontalLineValid = 1; Бордюр.IsVerticalLineValid = 1; Бордюр.TopLine = ЛинияБордюра; Бордюр.BottomLine = ЛинияБордюра; Бордюр.LeftLine = ЛинияБордюра; Бордюр.RightLine = ЛинияБордюра; Бордюр.HorizontalLine = ЛинияБордюра; Бордюр.VerticalLine = ЛинияБордюра; Диапазон.TableBorder = Бордюр; //**** Конец работы с бордюром ФайлОбмена.store(); //ФайлОбмена.storeAsURL("file:///"+СокрЛП(ИмяФайлаОО),MassivParametrov); ФайлОбмена.Close(Истина); ЗапуститьПриложение(ИмяВременногоФайла); КонецПроцедуры | |||
| 15
    
        miliko 13.08.14✎ 07:08 | 
        (0) сохранить табличный документ как XML или даже HTML     | |||
| 16
    
        miliko 13.08.14✎ 07:09 | 
        табличное поле сорри     | |||
| 18
    
        strange2007 13.08.14✎ 09:35 | 
        (16) или как xlsx     | |||
| 19
    
        vlandev 13.08.14✎ 09:40 | 
        А выгрузить в xls через MS-ADO возможно?     | |||
| 20
    
        strange2007 13.08.14✎ 09:41 | 
        (19) Средствами 1С выгружай. Создаёшь нужный таб.док. и вызываешь его метод "Сохранить" с параметрами формата сохранения     | |||
| 21
    
        kalisto 14.08.14✎ 06:15 | 
        (14) Спасибо за пример.     | |||
| 22
    
        kalisto 14.08.14✎ 06:16 | 
        (15) Тоже вариант. Как-то про это сразу и не подумалось.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |