1С и Libre office. Зафиксировать строку и колонку в Libre office

Автор kurochkin.m, 28 апреля 2016, 19:21

0 Пользователи и 1 гость просматривают эту тему.

kurochkin.m

Добрый день.

Делаю выгрузку из 1С в файл формата xls средствами Libre office.

Как программно зафиксировать строк и колонку на листе?

Rafik

#1
Насколько понимаю, LO подключается к 1С и командами LO делается отчетная форма.
Попробуй таким способом.
document   = Ссылка_на_документ.CurrentController.Frame
dispatcher = Ссылка_на_объект_Libre_office.createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:FreezePanes", "", 0, Пустой_массив)
Предварительно необходимо выделить ячейку, по которой будет сделана фиксация. Можно сделать переход на неё и потом вызвать фиксацию.
".uno:FreezePanes" снимает фиксацию при повторном вызове.

PS. с 1С не работал, но из сторонних программ делается как-то так.

kurochkin.m

А разве функция FreezeAtPosition не используется?

Есть рабочий пример?

Yakov

Цитата: kurochkin.m от 28 апреля 2016, 17:21Делаю выгрузку из 1С в файл формата xls средствами Libre office.
Какой смысл это делать через LO, если в 1с (особенно в V8) есть встроенный функционал для создания файлов в формате xls?

kurochkin.m

Есть готовая обработка, которая выгружала средствами ексель. Нужно сделать средствами либре. Все готово - функции переписать

rami

Цитата: kurochkin.m от 29 апреля 2016, 14:19А разве функция FreezeAtPosition не используется?

Есть рабочий пример?
Sub main
ThisComponent.getCurrentController().freezeAtPosition(5,5)
End Sub

kurochkin.m

Не хочет работать. Все функции переделал, а эту элементарность ну ни как.
Вот код из 1С

ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства.Name = "AsTemplate";
Свойства.Value = Истина;
Args = Новый COMSafeArray("VT_VARIANT", 3);
Args.SetValue(0, Свойства);
Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства1.Name = "Hidden";
Свойства1.Value = Истина;
Args.SetValue(1, Свойства1);
Document = Desktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Args);
   
Args2 = Новый COMSafeArray("VT_VARIANT",1);
Свойства3 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Args2.SetValue(0, Свойства3);
   
Args3 = Новый COMSafeArray("VT_VARIANT",1);
Свойства4 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства4.Name = "ToPoint";
Свойства4.Value = "A1";
Args3.SetValue(0, Свойства4);

dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper");

Sheet = Sheets.getByIndex(0);

oCtrl = Document.CurrentController;
oFrame = oCtrl.Frame;
oCtrl.setActiveSheet(Sheet);
oCtrl.FreezeAtPosition(2,1);
         
dispatcher.executeDispatch(oFrame,  ".uno:GoToCell", "", 0, Args3);
dispatcher.executeDispatch(oFrame,  ".uno:SplitWindow", "", 0, Args3);         
dispatcher.executeDispatch(oFrame, ".uno:FreezePanes", "", 0, Args2);

Где собака зарыта?



rami

Не понятно, что вы хотите. В каком офисе и на каком языке хотите макрос?
Зачем открывать новый документ невидимым?

kurochkin.m

Зачем мне его видеть? Открыл и записал его.

Выше же написано что надо получить в результате.

JohnSUN

А то что при загрузке в Hidden-режиме не подгружается часть функционала фрейма (в том числе не будут работать и многие команды диспетчера, относящиеся к "видимому" режиму) - это проблема офиса, а не кодера?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kurochkin.m

Спасибо все получилось. Вот где собака зарыта. Жаль, что ошибок никаких либре не выдает