Witam,
pracuję ostatnio w swoim programie nad tworzeniem raportu z obliczeń w LibreOffice/OpenOffice (wcześniej raport tworzyłem tylko w MS Word).

O ile udało mi się w zasadzie osiągnąć zamierzony cel i efekt (co nie było łatwe - API LibreOffice/OpenOffice jest bardzo chimeryczne, pod tym względem MS Word jest bardziej przewidywalny - bardzo ułatwiła sprawę biblioteka OOo Tool: http://berma.pagesperso-orange.fr/index2.html), to mam jeszcze dwa nierozwiązane problemy (po przeszukaniu różnych forów, google, itp. nie udało mi się niestety znaleźć żadnych podpowiedzi):

  1. w jaki sposób można sprawdzić że jest już otwarty dokument Writer (nie chcę aby program za każdym razem tworzył nowy dokument, idea jest taka aby raport był wklejany (OLE) do otwartego dokumentu, chyba że go nie ma to wtedy nowy dokument jest tworzony i raport wklejany).

Aktualnie mój kod wygląda tak:

var
  myDoc, myText, myCursor: Variant;

begin
  ConnectOpenOffice;
  myDoc:= StarDesktop.loadComponentFromURL('private:factory/swriter', '_blank', 0, dummyArray);
  myText:= myDoc.Text;
  myCursor:= myText.createTextCursor;

Procedura ConnectOpenOffice (OOo Tools):

procedure ConnectOpenOffice;
begin
  if IsOpenOfficeConnected then exit;
  Screen.Cursor:= crHourglass;      Application.ProcessMessages;
  try
    OpenOffice:= CreateOleObject('com.sun.star.ServiceManager');
    if isNullEmpty(OpenOffice) then    Raise EOOoError.Create(OOo_connectKO);
    StarDesktop:=       CreateUnoService('com.sun.star.frame.Desktop');
    disp:=              CreateUnoService('com.sun.star.frame.DispatchHelper');
    OOoIntrospection:=  CreateUnoService('com.sun.star.beans.Introspection');
    OOoReflection:=     CreateUnoService('com.sun.star.reflection.CoreReflection');
    OOoTypeDescrMngr:= OpenOffice.DefaultContext.getValueByName('/singletons/com.sun.star.reflection.theTypeDescriptionManager');
  finally
    Screen.Cursor:= crDefault;
  end;
end;
  1. Różne parametry w LibreOffice/OpenOffice Witer zapisywane są często jako rekordy/typ wariantowy ('com.sun.star.beans.PropertyValue'). Przy generowaniu raportu potrzebuję zmienić wartości odstępu między wierszami dla nowej linii (paragrafu), przykładowo (wykorzystanie procedur i funkcji z OOo Tools):
execDispatch('.uno:LineSpacing', CreateProperties(['LineSpacing.Mode', 0, 'LineSpacing.Height', 100]));

albo

execDispatch('.uno:SpacePara15', dummyArray);

Chodzi o to że po wygenerowaniu raportu chciałbym przywrócić pierwotną wartość odstępu między wierszami (dobra praktyka), czyli chciałbym przed wygenerowaniem raportu odczytać (poprzez API LibreOffice/OpenOffice) aktualną wartość odstępu między wierszami (LineSpacing) a potem (po wygenerowaniu raportu) ją przywrócić. Nie udało mi się nigdzie znaleźć wskazówki jak można to zrobić (własne różne kombinacje nie przyniosły efektu).

Będę bardzo wdzięczny za każdą wskazówkę, to jest mój pierwszy post na tym forum, więc bardzo proszę o wyrozumiałość..

Pozdrawiam!