Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2016, 10:49   #1
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию переходы в OpenOffice

Вот и до меня добралась эта штука...
в инете нашёл основы, как открывать документ как закрывать и как двигаться...
работаю с OpenOffice Writer.
в документе есть несколько таблиц, в них надо вставлять данные. причём часть должна вставлять моя прога, а часть пользователи пишут сами. вот иногда им не нравится количество пустых строк в таблице и они их удаляют, а у меня сбивается позиция куда надо вставлять данные. вроде как логично предположить что надо сделать метки на ячейках таблиц и перемещаться к ним. но где найти эти команды.. или хотя бы перейти к нужной таблице как в навигаторе ОО, а там уже сам бы нашёл от края таблицы нужное место.

процедура добавление текста.

Код:
procedure Save_aoo;
var
  i,j,Skv1:integer;
  str1,param:string;
  Ini_I_O:TextFile;
  sum1:double;
  AppPatch,path,list_ex:string;
  k: integer;
begin
  OpenOffice := TOpenOffice.Create;

  OpenOffice.Connect;
  OpenOffice.OpenDocument('file:///'+AnsiReplaceText(ExtractFilePath(Application.ExeName)+'Сводка.odt','\','/'));

  str1:='ОПЕРАТИВНО-ПРОИЗВОДСТВЕННАЯ СВОДКА   на ' +FormatDateTime('dd mmmm yyyy г.', Main_Form.DT_svod.DateTime) ;
  OpenOffice.ooStartDoc(3);
  OpenOffice.ooGoDown(2,False);
  OpenOffice.ooStartString;
  OpenOffice.ooEndOfLineSel ;

  OpenOffice.ooPrintString(str1);

  for I := 1 to obj_count_glo do
  begin
    if var_modul.par_otch[i].share_db='Arb_itog' then
    begin
      OpenOffice.ooStartDoc(3);
      OpenOffice.ooGoDown(8,False);
      OpenOffice.ooNextCell(7);
      OpenOffice.ooSelectCell(1);
      OpenOffice.ooPrintString(Main_Form.Rasch_grid.Cells[8,i-2]);
      OpenOffice.ooGoDown(1,False);
      OpenOffice.ooSelectCell(1);
      OpenOffice.ooPrintString(Main_Form.Rasch_grid.Cells[8,i-1]);
      OpenOffice.ooStartDoc(3);
      OpenOffice.ooGoDown(9,False);
      OpenOffice.ooNextCell(6);
      OpenOffice.ooSelectCell(1);
      OpenOffice.ooPrintString(Main_Form.Rasch_grid.Cells[6,i]);
    end;
    if var_modul.par_otch[i].share_db='OSK_itog' then
    begin

      OpenOffice.ooStartDoc(3);
      OpenOffice.ooGoDown(67,False);

      OpenOffice.ooPrevCell(5);

      OpenOffice.ooNextCell(1);
      OpenOffice.ooSelectCell(1);
      OpenOffice.ooPrintString(Main_Form.Rasch_grid.Cells[6,i]);
    end;
  end;
  OpenOffice.ooClose;
  OpenOffice.Free;


Вопрос: как переходить к таблицам в навигаторе это таблица 1(в проге Arb_itog) и таблица 7 (в проге OSK_itog)
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 14.11.2016, 10:49   #2
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

используемые методы.
Код:
function TOpenOffice.Connect: boolean;
begin
   if VarIsEmpty(StarOffice) then
      StarOffice := CreateOleObject('com.sun.star.ServiceManager');
   Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
end;
function TOpenOffice.OpenDocument(const aFileUrl:string): boolean;
var
   StarDesktop: Variant;
   VariantArr: variant;
begin
   StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
   VariantArr := VarArrayCreate([0, 1], varVariant);
   //VariantArr[0] := MakePropertyValue('FilterName', 'HTML (StarWriter)');
   Document := StarDesktop.LoadComponentFromURL(
                  aFileUrl, '_blank', 0,
                  VariantArr);
   Result := not (VarIsEmpty(Document) or VarIsNull(Document));
end;
procedure TOpenOffice.ooStartDoc(col:integer);
var oDispatcher,oArray:variant;
    CoreReflection,propertyValue0:variant;
    oFrame:variant;
    i:integer;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  oArray:=VarArrayCreate([0,0],varVariant);
  propertyValue0.Name:='';
  propertyValue0.Value:=0;
  oArray[0]:=propertyValue0;
  oFrame:=Document.getCurrentController.getFrame;
  for I:=1 to col do
    oDispatcher.executeDispatch(oFrame,'.uno:GoToStartOfDoc','',0,oArray);

end;
procedure TOpenOffice.ooGoDown(col:Integer; selected:boolean);
var oDispatcher,oArgs:variant;
    CoreReflection,propertyValue0,propertyValue1:variant;
    oFrame:variant;
    i:integer;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue1);
  oArgs:=VarArrayCreate([0,1],varVariant);
  propertyValue0.Name:='Count';
  propertyValue0.Value:=1;
  oArgs[0]:=propertyValue0;
  propertyValue1.Name:='Select';
  propertyValue1.Value:=selected;
  oArgs[1]:=propertyValue1;
  oFrame:=Document.getCurrentController.getFrame;
  for I:=1 to col do
    oDispatcher.executeDispatch(oFrame,'.uno:GoDown','',0,oArgs);

end;
procedure TOpenOffice.ooStartString;
var oDispatcher,oArray:variant;
    CoreReflection,propertyValue0:variant;
    oFrame:variant;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  oArray:=VarArrayCreate([0,0],varVariant);
  propertyValue0.Name:='';
  propertyValue0.Value:=0;
  oArray[0]:=propertyValue0;
  oFrame:=Document.getCurrentController.getFrame;
  oDispatcher.executeDispatch(oFrame,'.uno:GoToStartOfLine','',0,oArray);

end;
procedure TOpenOffice.ooEndOfLineSel;
var oDispatcher,oArray:variant;
    CoreReflection,propertyValue0:variant;
    oFrame:variant;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  oArray:=VarArrayCreate([0,0],varVariant);
  propertyValue0.Name:= 'Select' ;
  propertyValue0.Value:= true  ;
  oArray[0]:=propertyValue0;
  oFrame:=Document.getCurrentController.getFrame;
  oDispatcher.executeDispatch(oFrame,'.uno:EndOfLineSel','',0,oArray);

end;
procedure TOpenOffice.ooPrintString(sb:string);
var oDispatcher,oArgs,oArray:variant;
    CoreReflection,propertyValue0,propertyValue1:variant;
    oFrame:variant;
begin

  oArray:=0;
  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue1);
  oArgs:=VarArrayCreate([0,0],varVariant);
  oArray:=VarArrayCreate([0,0],varVariant);
  propertyValue0.Name:='Text';
  propertyValue0.Value:=sb;

  oArgs[0]:=propertyValue0;
  propertyValue1.Name:='';
  propertyValue1.Value:=0;
  oArray[0]:=propertyValue1;
  oFrame:=Document.getCurrentController.getFrame;
  oDispatcher.executeDispatch(oFrame,'.uno:InsertText','',0,oArgs);

end;
procedure TOpenOffice.ooNextCell(col:integer);
var oDispatcher,oArray:variant;
    CoreReflection,propertyValue0:variant;
    oFrame:variant;
    i:integer;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  oArray:=VarArrayCreate([0,0],varVariant);
  propertyValue0.Name:='';
  propertyValue0.Value:=0;
  oArray[0]:=propertyValue0;
  oFrame:=Document.getCurrentController.getFrame;
  for I:=1 to col do
    oDispatcher.executeDispatch(oFrame,'.uno:JumpToNextCell','',0,oArray);

end;
procedure TOpenOffice.ooSelectCell(kol:integer);
var oDispatcher,oArgs:variant;
    CoreReflection,propertyValue0:variant;
    oFrame:variant;
    i:integer;
begin
  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  oArgs:=VarArrayCreate([0,0],varVariant);
  propertyValue0.Name:='';
  propertyValue0.Value:=0 ;
  oArgs[0]:=propertyValue0;
  oFrame:=Document.getCurrentController.getFrame;
  oDispatcher.executeDispatch(oFrame,'.uno:EntireCell','',0,oArgs);
  if kol>1 then
    for i:=1 to kol-1 do
      oDispatcher.executeDispatch(oFrame,'.uno:JumpToNextCell','',0,oArgs);
end;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 14.11.2016, 13:55   #3
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

всё. нашёл костыль !!!! в справке без примеров...(если ни чего не помогает начинаем читать инструкцию).
ещё бы к этому описание параметров... но может найду.

https://wiki.openoffice.org/wiki/Fra...g_3.x_Commands

перехожу по таблицам, а дальше прыгаю по ячейкам.

Код:
procedure TOpenOffice.oogototable;
var oDispatcher,oArray:variant;
    CoreReflection,propertyValue0:variant;
    oFrame:variant;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  oArray:=VarArrayCreate([0,0],varVariant);

  oFrame:=Document.getCurrentController.getFrame;
  oDispatcher.executeDispatch(oFrame,'.uno:JumpToNextTable','',0,oArray);

end;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
быстрые переходы по страницам милт Работа с сетью в Delphi 10 02.03.2014 01:35
Переходы Руско Microsoft Office Access 0 02.01.2014 10:15
Условные переходы (if) 803 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2013 17:51
Переходы в галерее Elefanter WordPress и другие CMS 2 08.06.2010 21:22
Условные переходы серг Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.04.2010 22:24