Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: So 09.10.11 10:53 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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.

ausblenden 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 ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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:
ausblenden 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