Bereiche Kopieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

willi64de
*
Beiträge: 10
Registriert: Fr, 19.10.2012 08:20

Bereiche Kopieren

Beitrag von willi64de »

Hallo
Ich möchte aus der Tabelle c:\Verkauf\Verkauf.ods Tabellenblatt"Filiale1" die Werte aus A11:A35 kopieren und in die Tabelle c:Verkauf\Auswertung.ods Tabelle"Übersicht" ab B30 einfügen. Leider fkt das nur mit der 1.Zelle. Die anderen Zellen werden nicht übernommen. Ich habe schon mehrfach aufgezeichnet, aber es ändert sich nichts. Kann mir jemand helfen, wo mein Fehler liegt und mir einen Tipp geben.

vielen Dank

Code: Alles auswählen

sub Uebertrag
rem ---------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$11:$A$35"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$B$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())


end sub

Beitrag aus altem Thread abgetrennt; [⁠code]…[⁠/code] Tags eingefügt—lorbass, Mod
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Bereiche Kopieren

Beitrag von F3K Total »

Moin,
so etwas hatten wir schon mal. Hier. Ein geschriebenes Makro. Es wird die Zieldatei geöffnet und ein Importknopf gedrückt, du kannst es aber auch umdrehen und in der Quelldatei einen Exportknopf anlegen.

Viel Erfolg
Gruß R
willi64de
*
Beiträge: 10
Registriert: Fr, 19.10.2012 08:20

Re: Bereiche Kopieren

Beitrag von willi64de »

Hallo
Ich habe Deine Tipp gelesen und mich daran versucht, nur sehe ich den Wald vor lauter Bäumen nicht. Ich habe nochmal ein Makro aufgezeichnet, welches aber nur einmal fkt. hat. Danach habe ich die Daten geändert-Makro ausgeführt und nichts passierte. Es standen in der Übersicht noch die alten Werte drin.
Ich glaube mein Problem ist - ich weiß nicht wie man im Makro auf eine bestimmte Datei " Verkauf.ods" und anschließend auf das richtige Tabellenblatt "Filiale1"verweisen kann.
Auch ist der Bereich A11:A35 nicht zu finden.
Beim letzten basteln hat er mir den Bereich in dieselbe Tabelle kopiert und alles zerschossen. Wahrscheinlich muß noch ein Verweis auf die Datei "Auswertung.ods" und Tabelle "Übersicht" ab B30 gelegt werden.
Nur wie ??. Kann bitte nochmal jemand über der Code schauen und mir helfen. ?

Mit Excel kam ich klar, muß jetzt aber beruflich mit Openoffice arbeiten und scheitere an solchen einfachen Dingen
Danke im vorraus

Code: Alles auswählen

sub Uebertrag3
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$B$30"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(5) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Flags"
args3(0).Value = "SV"
args3(1).Name = "FormulaCommand"
args3(1).Value = 0
args3(2).Name = "SkipEmptyCells"
args3(2).Value = false
args3(3).Name = "Transpose"
args3(3).Value = false
args3(4).Name = "AsLink"
args3(4).Value = false
args3(5).Name = "MoveMode"
args3(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args3())


end sub
Ich habe nochmal die [⁠code]…[⁠/code] Tags für dich eingefügt. Bitte versuche demnächst selbst daran zu denken. Dies dient der Verbesserung der Lesbarkeit des Themas. Der Zusammenhalt der tragenden Texte wird durch relativ lange Code-Abschnitte beeinträchtigt.

Danke
lorbass, Mod


Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Bereiche Kopieren

Beitrag von balu »

Hallo willi,
Mit Excel kam ich klar, muß jetzt aber beruflich mit Openoffice arbeiten und scheitere an solchen einfachen Dingen
Ich bin Neugierig; hattest Du in Excel auch mit Makros gearbeitet? Und wenn ja, nur mit aufgezeichneten oder aber selbst geschriebenen?

mir einen Tipp geben
Klar doch! Lerne richtig programmieren.

Und für den Einstieg empfehle ich dir die StarBasic FAQ (deutsch) von Michael Dannenhöfer.


Ich möchte aus der Tabelle c:\Verkauf\Verkauf.ods Tabellenblatt"Filiale1" die Werte aus A11:A35 kopieren und in die Tabelle c:Verkauf\Auswertung.ods Tabelle"Übersicht" ab B30 einfügen.
Und in welcher Datei soll das Makro ausgeführt werden um die Daten zu kopieren?

Ich hab dir da mal was auf die schnelle aus meiner Grabbelkiste zusammengestrickt, was dich vielleicht weiterbringt.

- Klicke auf den Grünen Button in der angehängten Datei.
- Öffne mit dem dementsprechenden Button die Verkaufs-Datei.
- Öffne mit dem dementsprechenden Button die Auswertung-Datei.
- Klickke auf "Kopieren".
- Wenn kopiervorgang erledigt ist, erscheint dann ein Hellgrüner Bestätigungs-Dialog. Klicke dort auf den OK-Button.

Nun öffnest Du die eben geänderte Auswertungs-Datei, und überprüfst ob die Daten dort sind wo sie sein sollen.


WICHTIG!!
- Die Verkaufs-Datei muss wirklich das Tabellenblatt "Filiale1" haben, und die Daten sind wirklich im Bereich A11:A35.

- Die Auswertung-Datei muss wirklich das Tabellenblatt "Übersicht" haben, und der Bereich ab B30 darf keine Daten haben.

- Arbeite nur mit kopien der Auswertung-Datei, da sie durch dieses Programm überschrieben wird.


Ich weiß das dies noch nicht ganz dein Problem löst, aber wenn Du dich zusätzlich ein wenig mit der StarBasic FAQ befasst, dann kommst Du schon mal weiter. Und außerdem solltest Du dich ruhig noch mal mit dem verlinkten Thread von F3K befassen.



Gruß
balu
Dateianhänge
bereiche-kopieren_beispiel-0.ods
(15.84 KiB) 151-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
willi64de
*
Beiträge: 10
Registriert: Fr, 19.10.2012 08:20

Re: Bereiche Kopieren

Beitrag von willi64de »

Hallo balu
Danke für Deine schnelle Hilfe.
Ich habe im Excel mit aufgezeichneten Makros gearbeitet, welche ich bei Bedarf anpassen konnte. Dort standen der Pfad und die Adresse A11:A35 direkt drin.
Die Makros fkt. gut und ich dachte -in Openoffice ist es genau so leicht. Dein Makro fkt. sehr gut, aber es müssen beide Datein geschlossen sein. Ich wollte ein einfaches Makro in der Tabelle Auswertung.ods laufen lassen mit einen Button Aktualisierung. Die Tabelle Auswertung.ods ist also schon geöffnet und zu 50% ist auch der Verkauf.ods geöffnet.
Mit Verknüpfungen der Art ( File und DDD ) habe ich mich schon beschäftigt. Mein Chef möchte aber nur Werte und keine Verknüpfungen in der Auswertung.ods, damit er die Tabelle weiter geben kann. Ich weiß wie ich das Makro in die Tabelle Auswertung bekomme, ich scheitere bis jetzt nur am Makro-Code. Kannst Du mir weiter helfen ?
Dein Tipp mit der StarbasicFAQ habe ich schon angefangen

Danke Willi
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Bereiche Kopieren

Beitrag von balu »

Hallo willi,
Ich habe im Excel mit aufgezeichneten Makros gearbeitet, welche ich bei Bedarf anpassen konnte.
Ich selber hatte noch nie mit Excel-Makros gearbeitet, aber was ich hier schon mehrfach mitlesen konnte war, das Excel-Makros, die aufgezeichnet wurden, durch ein richtig geschriebenes Makro erheblich in der größe reduzieren liesen. Und so verhällt sich das auch hier mit Star-Basic.

Durch das mitlesen weiß ich aber auch, dass der Recorder bei Excel mehr und besser aufzeichnet als in Calc. Also für Anfänger ist Excel in dieser Hinsicht besser.

Trotzdem ist es besser wenn man sich doch mit der richtigen Programmierung befasst, egal ob in Excel oder in Calc, so zumindest meine Meinung.

Ich wollte ein einfaches Makro in der Tabelle Auswertung.ods laufen lassen mit einen Button Aktualisierung.
Das ist eine sehr wichtige Info die Du erst jetzt gegeben hast. Denn jetzt ist klar welche Datei geöffnet werden muss, und wo das Makro ausgeführt wird.

Mein Chef möchte aber nur Werte und keine Verknüpfungen in der Auswertung.ods, damit er die Tabelle weiter geben kann.
Das macht meine Beispieldatei nicht, Daten verknüpfen. Sie kopiert die Daten zwischen den Dateien.

Ich weiß wie ich das Makro in die Tabelle Auswertung bekomme, ich scheitere bis jetzt nur am Makro-Code.
Na dann werd ich mal das ganze grob beschreiben.

Zum Thema Varibalendeklaration, die ganz am Anfang steht, siehe auch Dannenhöfer: 3.6 Welche Gültigkeit haben Variablen?

Die Sub DialogStarten ist für den Dialog verantwortlich wo Du die Dateien auswählst.

Die Sub VerkaufWaehlen und Sub AuswertungWaehlen werden ausgeführt wenn Du im Dialog auf die dementsprechenden Buttons klickst. Darin wird dann die function FileOpenDialog aufgerufen und ausgeführt die dann den Dialog zur Dateiauswahl startet, der aber nicht extra programmiert werden muss.

Und so bald eine Datei mit OK ausgewählt wurde, wird der Pfad und der Dateiname in die Variable sVerkaufsdatei oder sAuswertungsdatei geschrieben.

Kommen wir zur Sub Oeffnen_und_kopieren.
' Dateien öffnen.
'

Sagt eigentlich schon alles.
Hier werden die ausgewählten Dateien, die in den jeweilgen Variablen stehen, geöffnet. Anschließend werden die geöffneten Dateien als Object oVerkauf und oAuswertung defeniert.
Dannenhöfer: 6.1 Öffnen/Speichern

' Die Blattnummer für Filiale1 in Verkauf rausfiltern
'

und
' Die Blattnummer für Übersicht in Auswertung rausfiltern
'

Das sind einfache Schleifen die nach den jeweiligen Namen der Blätter sucht und deren Index-Nr. in ibV und ibA reinschreibt. Diese Index-Nr. wird im nächstem Schritt gebraucht.

Da ich ja nicht weiß welche Index-Nr. die besagten Blätter in deinen Dateien haben, hatte ich mal eben auf die schnelle diese Schleife gebaut.


' Werte zwischen oVerkauf und oAuswertung kopieren.
'

Erst wird das Datenarray deklariert:Dim array2d()
Und in der nächsten Zeile wird das Datenarray eingelesen, und in der folgenden Zeile wird das Datenarray dann geschrieben. Mit diesen 2 Zeilen werden die Datenbereiche von einer Datei in die andere kopiert.
Zwei Nachteile gibt es aber dabei.
1.
Formate werden nicht mit kopiert.

2.
Der Quellbereich und der Zielbereich müssen gleich groß sein.

Dannenhöfer: 7. Tabellen - Calc

Und wenn das kopieren erledigt ist, erscheint dann der Hellgrüne Hinweisdialog.


Die letzten beiden Subs sind eigentlich fast selbstredend. Dennoch ein paar kurze Worte dazu.
Sub AlleSchliessen wird ausgeführt, wenn Du im Hellgrünen Hinweisdialog auf OK klickst. Beide Dateien werden geschlossen, wobei eine aber zuvor erst noch gespeichert wird.

Sub Abbruch wird durch den Abbruch-Button ausgeführt. Beide Datein werden geschlossen, es findet kein speichern statt.


Hier noch nützliche Links für weiterführende Dokumentationen.
Die deutsche Übersetzung von "OpenOffice.org Macros Explained" findest Du hier:
http://www.uni-due.de/~abi070/ooo.html

Und das Originale:
http://www.pitonyak.org/oo.php

Außerdem empfehlenswert sind folgende Tools; Mri oder Xray. Musst Du mal googeln.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
willi64de
*
Beiträge: 10
Registriert: Fr, 19.10.2012 08:20

Re: Bereiche Kopieren

Beitrag von willi64de »

Hallo Balu
Danke für Deine ausführliche Beschreibung. Jetzt wird's für mich besser verständlich. Das mein Chef nur Werte möchte, deshalb bin ich auf die Idee gekommen, dies mit Makro zu lösen. Ich habe das Wochenende mit "basteln" verbracht. Ich habe versucht ein eigenes Makro zuschreiben, durch Deine Hilfe. Wenn beide Tabellen geöffnet sind wird zumindest in der Filiale1 der Bereich markiert , aber es wird immer nur die erste Zelle kopiert und als Wert eingefügt obwohl der Zielbereich identisch ist. Die anderen Zellen werden als Wert aber nicht übernommen. Ich gebe nicht auf und Versuchs weiter. Mit Deiner Anleitung müßte ich es schaffen. Ich Versuche mal diese Woche jede Zelle einzeln zu kopieren und als Wert einzufügen. Da wird das Makro zwar länger, aber vielleicht klappt es.
Wenn ich es nicht hinkriege, könntest ich Dich dann nochmal um Hilfe bitten ?

Danke Balu für Deine Hilfe - echt Super
Antworten