Zapis danych do OppenOffice

0

Witam

Potrzebuje w programie dodać możliwość eksportu tabeli do pliku *.ods (Calc - Open Office).

Zgodnie z tym co znalazłem w necie wklepałem coś takiego :

procedure TForm1.Button9Click(Sender: TObject);
VAR
   OpenOffice,OpenDesktop ,objDocument: Variant;
begin
      OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
      OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop');
      objDocument:= OpenDesktop.loadComponentFromURL('c:\xxx.ods','_blank', 0);
     
end;      

Przy próbie wywołania otrzymuję błąd "niedopasowanie typu".

Czy to jest spowodowane ?

Z góry dziękuje za pomoc.

0

Dlaczego twoim zdaniem używamy i/lub rozwijamy OpenOffice? Czy jeżeli będziesz mieć problem z glebogryzarką X2000 to też napiszesz tutaj a nie do producenta? Serio? A może po prostu nie potrafisz wybrać odpowiedniego forum na swoje pytanie?

0
2rwe2 napisał(a):

Dlaczego twoim zdaniem używamy i/lub rozwijamy OpenOffice? Czy jeżeli będziesz mieć problem z glebogryzarką X2000 to też napiszesz tutaj a nie do producenta? Serio? A może po prostu nie potrafisz wybrać odpowiedniego forum na swoje pytanie?

Jeżeli glebogryzarką X2000 będę próbował sterować za pośrednictwem aplikacji napisanej w Delphi i to właśnie Delphi wywali mi błąd to owszem - poproszę o pomoc tutaj.

0

"nigdy tego nie robiłem", ale może spróboj na Wordzie który pewnie jest lepiej opisany, potem pewnie łatwiej będzie przenieśc na Opena
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/OleAuto_CreateOleObject.html

1

Wg gugla powinno być

OpenDesktop.loadComponentFromURL(ConvertToURL('c:\xxx.ods'),'_blank', 0)
0
m_Lesiu napisał(a):

"nigdy tego nie robiłem", ale może spróboj na Wordzie który pewnie jest lepiej opisany, potem pewnie łatwiej będzie przenieśc na Opena
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/OleAuto_CreateOleObject.html

Z Wordem to rzeczywiście działa.
Jednak Open Office nie mogę namówić do współpracy póki co...

0

Na wstępie zaznacze, że przykład kodu dołaczonego do tego posta - pisany jest w Delphi 7. Pod takim IDE na ogół piszę. Także do Lazarusa sobie go możesz po przeanalizowaniu przeróbić. Całość pisana była bardzo dawno temu. I nie do końca jest to profesjonalne. Jendnak chodzi o zasadę współpracy z Open Office Calciem. Możesz sobie uruchomić exek programu, który zawsze dołaczam wraz z kodem. Później dodać jakieś nicki (mogą być na szybko na przykład pojedyncze znaki) do jeden z grup. Ewentualnie później zmienić inne, dostępne opcje i eksportować do Open Office Calca jednym z przycisków. Sprawdziłem i z nieco starszą wersją OE, jaką używam, czyli 3.1.0 działa to nadal prawidłowo. Może kiedyś zaktualizuje OE. A program powstał spory czas temu, kiedy miałem zoorganizować turniej w Amigową wersję "Sensible World of Soccer" u siebie. I potrzebowałem rozwiązania, które wygeneruje szybko eleganckie tabelki z nickami graczy, od razu gotowe do wydrukowania. Być może kod się Tobie przyda. Jeżli nie - to trudno. Wtedy może ktoś jeszcze coś Ci tutaj doradzi lepszego. I może napisanego od razu w Lazarusie.

0

@olesio dziękuję bardzo za udostępnienie swojego projektu.

Po dodaniu bibliotek oootools i ooomessage na początek spróbowałem ze zwykłym wywołaniem :

  ConnectOpenOffice;
  StarDesktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0);  

Tym razem otrzymuję komunikat:
"W magazynie brak miejsca na wykonania tej operacji"

0

Nie wgłębiałem się w ten moduł. Googlując na przemiennie za przykładami Office'a od MicroSoftu, a później w nieco bałaganiarsko zorganizowanej dokumentacji SDK OpenOffice'a, zrobiłem jak widzisz. I u mnie działa. Dlatego pytanie, czy na moim oryginalnym kodzie, też Ci się nie otwiera OpenOffice Calc i nie tworzy gotowa tabelka z nickami i miejscem na wpisanie rezultatów? Pewnie z MicroSoftowym Office'm bylo by mniej problemów, ale ja używam OE od dawna po przesiadce na nowszy systemy i dlatego kombinowałem z tym rozwiązaniem. Jedynie więcej co mogę Tobie doradzić, to spróbować napisać na oficjalne forum supportu. I raczej znaleźć te anglojęzyczne sekcje, bo nie wiem czy na użytkowników z Polski w tej kwestii mozna liczyć i to pisząc w u nas jak niestety się mi wydaje, dosyć "niszowym" języku programowania, jakim jest obiektowy Pascal.

0

Uruchamiając Twój projekt (z exe'ka) wszystko chodzi poprawnie.
Próbowałem importować go do Lazarusa ale kończy się nastoma błędami różnej maści.
Korzystając z Twojego projektu zrobię sobie na szybko oddzielny programik do eksportu w Delphi, a na przyszłość spróbuję poszukać rozwiązania na oficjalnym forum OO tak jak zasugerowałeś.
Dziękuję serdecznie za pomoc.

Ps. Z exportem do Excela MicroSoftu nie ma problemu - jednak w firmie używamy wyłącznie Calca (koszty...)

0

Ok, niestety z przeportowaniem do Lazarusa nie pomogę. Jeśli dyrektywa kompilatora {$MODE DELPHI} nie pomaga, to nie wiem czy bym doszedł, jak przerobić te moduły. Być może istnieją również i gotowe komponenty/moduły/artukuły z podpowiedziami, które pozwolą Tobie ogarnąć ten temat pod Lazarusem.

0

Próbowałem importować go do Lazarusa ale kończy się nastoma błędami różnej maści.

No to teraz możesz dziękować temu że jednemu z najbardziej doświadczonych użytkowników (jeżeli nie najbardziej doświadczonemu) Lazarusa tutaj wmawiałeś że jest idiotą.

Ok, niestety z przeportowaniem do Lazarusa nie pomogę. Jeśli dyrektywa kompilatora {$MODE DELPHI} nie pomaga, to nie wiem czy bym doszedł, jak przerobić te moduły. Być może istnieją również i gotowe komponenty/moduły/artukuły z podpowiedziami, które pozwolą Tobie ogarnąć ten temat pod Lazarusem.

Olesio, nie mów o tym o czym nie masz pojęcia, {$MODE DELPHI} jest dodawane z automatu...

0

@hipekk - jeżeli interesuje Ciebie eksport do arkusza kalkulacyjnego (OpenOffice lub MS Office) to polecam skorzystanie z komponentu fpspreadsheet: http://wiki.freepascal.org/FPSpreadsheet . W archiwum z komponentem są przykłady zapisu i odczytu, np. zapis do OO Calc:

program opendocwrite;

{$mode delphi}{$H+}

uses
  Classes, SysUtils, fpspreadsheet, fpsallformats,
  laz_fpspreadsheet;

var
  MyWorkbook: TsWorkbook;
  MyWorksheet: TsWorksheet;
  MyDir: string;
begin
  MyDir := ExtractFilePath(ParamStr(0));

  // Create the spreadsheet
  MyWorkbook := TsWorkbook.Create;
  MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet');

  // Write some cells
  MyWorksheet.WriteNumber(0, 0, 1.0);// A1
  MyWorksheet.WriteNumber(0, 1, 2.0);// B1
  MyWorksheet.WriteNumber(0, 2, 3.0);// C1
  MyWorksheet.WriteNumber(0, 3, 4.0);// D1
  MyWorksheet.WriteUTF8Text(4, 2, 'Total:');// C5
  MyWorksheet.WriteNumber(4, 3, 10);        // D5
  // Add some formatting
  MyWorksheet.WriteUsedFormatting(0, 0, [uffBold]);

  // Creates a new worksheet
  MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet 2');

  // Save the spreadsheet to a file
  MyWorkbook.WriteToFile(MyDir + 'test.ods',
    sfOpenDocument);
  MyWorkbook.Free;
end. 

1 użytkowników online, w tym zalogowanych: 0, gości: 1