Entwickler-Ecke

Sonstiges (Delphi) - Open Office Tabelle unsichtbar öffnen


Peter18 - So 09.10.11 10:53
Titel: Open Office Tabelle unsichtbar öffnen
Ein freundliches Hallo an alle,

ich hoffe jemand kann mir den entscheidenden Tipp geben, denn mir gehen langsam die Ideen aus.
Hier ist das Problem:
Ich möchte mit Delphi4 eine OO-Tabelle öffnen, Daten auslesen und sie wieder schließen. Soweit kein Problem, doch die Tabelle soll dabei unsichtbar bleiben.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
//    Par          := VarArrayCreate([0, - 1], varVariant);
    SetLength(Par, 1);
    OpenOffice   := CreateOleObject('com.sun.star.ServiceManager');
    Par[0]       := OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Par[0].Name  := 'Hidden';
    Par[0].Value := False;

    StarDesktop  := OpenOffice.createInstance('com.sun.star.frame.Desktop');
    sv           := OpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
    Path         := sv.getFileURLFromSystemPath('', FilePath);
    excel        := StarDesktop.loadComponentFromURL( Path, '_blank'0, Par );
    Sheet        := Vertrieb.excel.Sheets.getByName( WorkSheet );

Verwende ich den Dummy-Parameter ist alles ok, wenn ich aber "Hidden" verwende erhalte ich bei "loadComponentFromURL" einen Typekonflikt. Entweder stimmt "Name" nicht oder "Value" muß anders aussehen.
Longbool und String liefern jedenfalls das gleiche Ergebnis.

Dank euch im voraus und grüße euch aus dem kalten Norden

Peter


Martok - So 09.10.11 15:14

Der Fehler den ich bekomme ist [Fehler] Unit1.pas(49): Typ in einem OLE-Automatisierungsaufruf nicht erlaubt. Bei dir auch? Gut. Der sollte auch kommen, Par muss ja ein OLE-Dings sein, also ein VarArray.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
const
  FilePath = 'G:\Dokumente\einedatei.ods';
var
  Par, OpenOffice, StarDesktop, sv, Path, calc, Sheet: OLEVariant;
begin
  Par          := VarArrayCreate([00], varVariant); // [lowest index, highest index]
  OpenOffice   := CreateOleObject('com.sun.star.ServiceManager');
  Par[0]       := OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Par[0].Name  := 'Hidden';
  Par[0].Value := True;

  StarDesktop  := OpenOffice.createInstance('com.sun.star.frame.Desktop');
  sv           := OpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
  Path         := sv.getFileURLFromSystemPath('', FilePath);
  calc         := StarDesktop.loadComponentFromURL( Path, '_blank'0, par );
  Sheet        := calc.Sheets.getByName( 'Tabelle1' );


So funktionierts bei mir (Delphi 7, LibreOffice 3.3).

Achja: Schön dran denken das wieder zu schließen, sonst gibts Prozessleichen, die der User auch nicht mehr schließen kann. Sind dann ja Hidden ;)


Peter18 - Mo 10.10.11 12:12

Hallo Martok,

danke für Deine Antwort. Hatte die Zeile "Par := VarArrayCreate([0, 0], varVariant);" vergessen. (manchmal sieht man den Wald vor lauter Bäumen nicht) Aber nach vielen Änderungen bleiben Leichen im Keller. :wink:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    Par          := VarArrayCreate([00], varVariant);
    OpenOffice   := CreateOleObject('com.sun.star.ServiceManager');
    Par[0]       := OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Par[0].Name  := 'Hidden';         
    Par[0].Value := True;             

    StarDesktop  := OpenOffice.createInstance('com.sun.star.frame.Desktop');
    sv           := OpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
    Path         := sv.getFileURLFromSystemPath('', FilePath);
    excel        := StarDesktop.loadComponentFromURL( Path, '_blank'0, Par );
    Sheet        := Vertrieb.excel.Sheets.getByName( WorkSheet );

;-) Selbst schmunzelnd wird alles wieder geschlossen, das ist nur die Open-Routine.

Nochmals danke und Grüße von der Nordsee

Peter