Daten aus Calc per Makro in Writer

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Daten aus Calc per Makro in Writer

von mecki_45 » Mo, 01.03.2004 18:31

Hallo Thomas,
Danke für Deine Mühe - ich habe den Fehler gefunden.
Habe beim coden die falsche Tabelle und zusätzlich noch die falsche Zelle angegeben - ein paar Zeilen höher.
Das hat mich ein paar Stunden gekostet.

Nochmals Danke und schönen Abend
Alex

von Toxitom » So, 29.02.2004 17:15

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

von mecki_45 » Sa, 28.02.2004 14:50

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

von Toxitom » Do, 26.02.2004 08:54

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

von mecki_45 » Mi, 25.02.2004 18:31

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

Re: Daten aus Calc per Makro in Writer - Nachfrage

von openmind » Mi, 25.02.2004 15:43

mecki_45 hat geschrieben:Any idea?

any code?

Daten aus Calc per Makro in Writer - Nachfrage

von mecki_45 » Mi, 25.02.2004 15:31

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

von Toxitom » Do, 22.01.2004 12:02

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

von Ein__Stadtmensch » Do, 22.01.2004 11:22

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...

von Toxitom » Do, 22.01.2004 10:48

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

von Ein__Stadtmensch » Do, 22.01.2004 10:18

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?

von Charly » Mi, 21.01.2004 17:15

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

von Ein__Stadtmensch » Mi, 21.01.2004 15:08

...und am Besten Calc auch noch geschlossen wird...

Aber...

von Ein__Stadtmensch » Mi, 21.01.2004 15:06

...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?

Danke!!

von Ein__Stadtmensch » Mi, 21.01.2004 14:37

Hey Charly,

das hat wunderbar funktioniert! Vielen Dank...

Gruß, Beni

Nach oben