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:
| 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([0, 0], 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); 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([0, 0], 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!