Seite 1 von 2

Daten aus Calc per Makro in Writer

Verfasst: Do, 15.01.2004 17:47
von Ein__Stadtmensch
Hallo,

ich möchte gerne eine Calc-Tabelle auslesen und die Zellwerte in dem Writer in Textfelder ablegen.

Das Problem ist dabei, dass ich nicht genau weiß, wie man eine andere Datei (eben die Calc-Datei) öffnet.

Code: Alles auswählen

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()
So geht es scheinbar nicht...

Danke!!

Verfasst: Mi, 21.01.2004 14:37
von Ein__Stadtmensch
Hey Charly,

das hat wunderbar funktioniert! Vielen Dank...

Gruß, Beni

Aber...

Verfasst: Mi, 21.01.2004 15:06
von Ein__Stadtmensch
...gleich noch eine Frage hinterher:

Nun ist es so, dass ich wenn ich das Makro in dem Writer ausführe, danach Calc geöffnet ist.

Mit welchem Befehl kann man denn dann wieder automatisch in den Writer wechseln?

Verfasst: Mi, 21.01.2004 15:08
von Ein__Stadtmensch
...und am Besten Calc auch noch geschlossen wird...

Verfasst: Mi, 21.01.2004 17:15
von Charly
Hallo Stadtmensch!

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.

Code: Alles auswählen

Dim oDoc as object
oDoc = ThisComponent
Mit oDoc kannst du auf das Textdokument und mit Calc auf das Tabellendokument zugreifen.

Bei deiner nächsten Frage würde ich zunächst das Tabellendokument speichern, vorausgesetzt, es ist eine Änderung eingetreten und dann schließen.

Code: Alles auswählen

If (Calc.isModified) Then 
	Calc.store()            
End if

Calc.close(0)
Hinweis ein: Ein neues Dokument braucht zum speichern folgenden Befehl:

Code: Alles auswählen

Calc.storeAsUrl(Url,Dummy())
Gruß
Charly

Verfasst: Do, 22.01.2004 10:18
von Ein__Stadtmensch
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...

Hat dafür jemand eine Erklärung?

Verfasst: Do, 22.01.2004 10:48
von Toxitom
Hallo Stadtmensch,

die Methode close(0) sollte funktionieren. prüf mal Schreibweise oder so.

Keines Test Programm:
öffen ein Calc -Dokument, neues Makro:

Code: Alles auswählen

sub main
       oDoc=thisComponent
       oDoc.close(0)
end sub
und weg ist das dokument (eben geschlossen, ohne Nachfrage!!)

Gruss
Thomas

Verfasst: Do, 22.01.2004 11:22
von Ein__Stadtmensch
Habe die Zeile kopiert... Bei mir hält er dann in der Zeile mit .close(0) an und gibt folgende Fehlermeldung aus:
OpenOffice.org 1.0.3
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden.
Liegt das vielleicht an der Version von OpenOffice?

Ich habe das Makro mit Writer und Calc ausgetestet. Ging in beiden Fällen nicht...

Verfasst: Do, 22.01.2004 12:02
von Toxitom
Ja, wahrscheinlich Versionen-Problem.

Führe alle Basic-Test nur noch mit OOo 1.1.0 durch und da geht es. Es gab auch einige Änderungen zur Vorversion.

Also, updaten.

Anderer Versuch wäre dispose() , entweder so oder mit -1 in der Klammer. Damit "verschwinden" viele Objekte, vielleicht auch die Anwendung?

Gruss
Thomas

Daten aus Calc per Makro in Writer - Nachfrage

Verfasst: Mi, 25.02.2004 15:31
von mecki_45
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.

Any idea?

Gruß
Alex

Re: Daten aus Calc per Makro in Writer - Nachfrage

Verfasst: Mi, 25.02.2004 15:43
von openmind
mecki_45 hat geschrieben:Any idea?

any code?

Verfasst: Mi, 25.02.2004 18:31
von mecki_45
Hallo openmind,

anbei der komplette Code des Makro:

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.

Any idea?

Grüßle
Alex

Verfasst: Do, 26.02.2004 08:54
von Toxitom
Hallo Alex.

kleiner Tipp: Unter

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.

Gruss
Thomas

Verfasst: Sa, 28.02.2004 14:50
von mecki_45
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.

Gruß
Alex

Verfasst: So, 29.02.2004 17:15
von Toxitom
HAllo Axel,

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?

Gruss
Thomas