Dim Calc as Object
Dim sheet as Object
Dim args()
Calc = objDesktop.loadComponentFromURL("file:///C:/Pfad/daten.sxc","_blank", 0, args)
sheet = Calc.currentSelection.getSpreadsheet()
Um zwischen Dokumenten hin und herzuwechseln brauchst du nur jedem Objekt eine Variable zuzuordnen. In meinem Beispiel habe ich dem Tabellendokument den Namen Calc zugeordnet. Du musst also als erstes dem Texdokument eine Variable zuordnen und dann erst das andere Dokument aufrufen.
Das Speichern funktioniert nach deiner Anleitung wunderbar.
Beim Beenden findet er die Methode "close" nicht. Als ich die Methoden des Calc-Dokumentes ausgegeben habe, war close auch nicht dabei. Auf den ersten Blick klingt auch keine Methode nach Schliessen...
Hallo,
ich habe dies ganze hier verfolgt und ebenfalls umgesetzt, leider funktioniert es bei mir nur teilweise.
Was ich will ist ein kleinwenig anders.
Bei mir soll der Wert einer Zelle in OO_Calc incrementiert werden, das Ergebnis hiervon wird in die Zelle zurückgeschrieben und dieser zurückgeschriebene Wert soll nun in OO_Writer an die Stelle kopiert werden, an der der Textcursor steht.
Das Auslesen, berechnen und in OO_Calc zurückschreiben klappt, nur das übertragen des Werts in OO_Writer funktioniert nicht.
Sub Calculate_and_copy_to_OO_Writer
'--------------------------------------------------
' Variablen deklarieren
Dim Pfad as String ' Pfad und Dateiname
Dim Dummy()
Dim URL as String
Dim Calc as Object
Dim Sheet as Object ' Tabellenblatt
Dim Zelle as Object ' Zelle, z.B. A1
Dim Wert as Integer ' Zellinhalt als Integer
'-------------------------------------------------
' hier sollte eine Abfrage hin, ob das OO_Calc -Dokument
' gerade geöffnet ist
' wenn ja, Makro mit Hinweis auf nochmaliges Laden
' der Dokumentvorlage beenden
'--------------------------------------------------
' Variablen belegen
Pfad = "E:\Texte\zaehl_tab.sxc" ' Variable mit Pfad und Dateiname
URL = ConvertToUrl(Pfad)
Calc = StarDesktop.loadComponentFromUrl(URL, "_blank", 0, Dummy())
'------------------------------------------------------------------
' Zellinhalt holen, incrementieren und wieder zurückschreiben
' für spätere Verwendung
Sheet = Calc.sheets(0) ' Sheet 1 festlegen
Zelle = Sheet.getCellbyPosition (0,0) ' Position A1 setzen
Wert = Zelle.Value ' Zellwert an Variable
Wert = Wert + 1 ' Increment
Zelle.Value = Wert ' numerischen Wert in Zelle
'----------------------------------------------------------------
' OO_Calc -Dokument speichern und schließen
If (Calc.isModified) then ' Calc-Doku speichern, wenn geändert
Calc.store() ' (was ja passiert ist)
End if
Calc.close(0) ' Calc-Doku schliessen
'--------------------------------------------------------------------
' und jetzt wird der Inhalt der Variable "Wert" an die
' Cursorposition von OO_Writer kopiert
und das fehlt
End Sub
================================
Soweit das Makro. Bis auf die Datenübertragung nach OO_Writer funktioniert alles bestens. Der incrementierte Wert erscheint in OO_Calc, aber OO_Writer bleibt Datenlos.
http://www.amt-wiesbaden.de
im Bereich OpenOffice -> Downloads gibt es eine recht gut dokumentierte Vorlage "Rechnungsvorlage....".
Dort wird ein ähnliches Problem gelöst, die zu incrementierende Zahl jedoch aus einer einfachen Textdatei geholt statt uas einem Calc-Dokument.
Würde ich allerdings in deinem Fall aus Perfrmancegründen auch vorziehen, falls die Calc -Tabelle nicht noch andere Funktionen hat.
Der Code zum Einfügen in ein Writer Dokument ist dort gut beschrieben. Das sollte dir weiterhelfen.
Hallo Thomas,
Danke für den Tipp.
Habe es ausprobiert und es hat auch kurzzeitig funktioniert.
Als ich dann das Ganze in eine Doku-Vorlage kopiert habe, begannen die Probleme.
OO meldet mir einen Fehler beim Übertragen des Inhalts an die Position der Textmarke - hier die betr. Zeile:
Cursor.String = Inhalt
Die Fehlermeldung besagt,das die ObjektVariable "Cursor" nicht definiert ist. Doch selbst dann,wenn ich "DIM Cursor as Object" definiere,klappt es nicht mehr.
Ich weiß beim besten Willen nicht, wo der Fehler liegen soll.
ok, da bräuchte ich mehr Code. Wie wurde der Cursoe definiert? nicht mit Dim , sondern richtig?
Entweder Code hier posten (im Zusammenhang), oder du schickst mir mal die Datei als PM. Dann kannich mehr sagen und evt. helfen.
Das Beispiel sollte eigentlich auch nicht dazu dienen, es zu kopieren, sondern, um das Prinzip zu verstehen. Im Beispiel "Rechnungsformular" wurde mit Tabellen gearbeitet und TExtmarken innerhalb davon gesetzt. Dort wird der Cursor völlig anders definiert wie im normalen Dokument. Vielleicht liegen hier die Fehler?