|
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) Тоже вариант. Как-то про это сразу и не подумалось.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |