Calc, Makroaufzeichnung,Bereiche kopieren

classic Classic list List threaded Threaded
10 messages Options
Günter Fritze Günter Fritze
Reply | Threaded
Open this post in threaded view
|

Calc, Makroaufzeichnung,Bereiche kopieren



Am 18.04.2017 um 14:46 schrieb Günter Fritze:

>
>
> Am 18.04.2017 um 14:29 schrieb Günter Fritze:
>> Hallo zusammen!
>>
>> Vor längerer Zeit habe ich durch Makroaufzeichnung eine Prpzedur
>> generieren lassen, die einen Tabellenbereich an eine andere Stelle
>> kopiert.
>>
>> sub Copyall(von As Variant, nach As Variant)
>> 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 = von
>>
>> 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 = nach
>>
>> dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
>>
>> rem
>> ----------------------------------------------------------------------
>> dim args4(5) as new com.sun.star.beans.PropertyValue
>> args4(0).Name = "Flags"
>> args4(0).Value = "A"
>> args4(1).Name = "FormulaCommand"
>> args4(1).Value = 0
>> args4(2).Name = "SkipEmptyCells"
>> args4(2).Value = false
>> args4(3).Name = "Transpose"
>> args4(3).Value = false
>> args4(4).Name = "AsLink"
>> args4(4).Value = false
>> args4(5).Name = "MoveMode"
>> args4(5).Value = 4
>>
>> dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0,
>> args4())
>>
>>
>> end sub
>>
>> Diese Prozedur funktionierte mindestens 6 Monate einwandfrei.
>>
>> Ich war jetzt gezwungen mein Linuxsystem LinuxMint neu zu installieren.
>>
>> Die neue Version ist.
>>
>> Version: 5.1.4.2
>> Build-ID: 1:5.1.4-0ubuntu1
>> CPU-Threads: 4; BS-Version: Linux 4.4; UI-Render: Standard;
>> Gebietsschema: de-DE (de_DE.UTF-8)
>>
>> Die Kopien bringen teilweise unsinnige Ergebnisse. Ich habe nun eine
>> neue Prozedure generieren lassen, und siehe da: Es geht wieder. Die
>> einzigen Unterschiede sind in
>>
>> args4(5) steht statt der 4 eine 6.
>>
>> Vielleicht ist damit einem Mitstreiter geholfen.
>>
>> MfG
>>
>> Günter Fritze
>>
>>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Gerhard Weydt Gerhard Weydt
Reply | Threaded
Open this post in threaded view
|

Re: Calc, Makroaufzeichnung,Bereiche kopieren

Hallo Günter,

beim Aufräumen in meinem Postfach habe ich die angehängte Mail gefunden.
Da war ja keine Antwort vonnöten, aber ich hatte sie wohl mal stehen
lassen, um zu sehen, ob da noch was kommt.

Aber ich denke, dass das ein typisches Beispiel ist, wie sich
Makro-Aufzeichnung und Programmierung mit Uno unterscheiden. Ich
spekuliere da ein bisschen, weil ich auch nicht genau weiß, was wirklich
im Programm passiert, aber ich glaube doch, dass ich im Wesentlichen das
Richtige treffe.
Ich habe versucht, ein entsprechendes Makro aufzuzeichnen, aber statt
des komplizierten "InsertContents" wurde bei mir nur ein "Paste"
generiert, ich kann nicht sagen, ob das am Release oder etwas anderem
liegt. Aber sei's drum: entweder das oder die Änderung der Wertes des
Parameters "args4(5).Value", die du herausgefunden hast, zeigen in die
selbe Richtung: die Aufzeichnung nimmt die aktuellen Werte, die in der
Programmierung der Oberfläche verwendet werden, und die können sich
schnell mal ändern, weil es eben direkte Werte sind; wenn man Uno
verwendet, gibt es Variablen, die auch nach Änderungen den gleichen
Namen, aber evtl. anderen Inhalt haben.
Wenn man Uno-Befehle verwendet, findet man (für ein Datenblatt) die
Befehle CopyRange und MoveRange, bei denen man den Quellbereich und die
linke obere Zelle des Ziels benennt. Das ist auch ein anderes Vorgehen
als in der Oberfläche, die erst selektiert, dann erst sagt, was
passieren soll, und zum Schluss, wo. Ich habe diese Befehle nicht
konsequent ausprobiert, aber sie sollten die Aufgabenstellung
grundsätzlich und release-unabhängig lösen.
Wenn man häufig die gleiche Aufgabenstellung hat, also hier: ich habe
einen Bereich in einer Calc-Tabelle markiert und möchte den irgendwo
anders hinkopieren, dann funktioniert das aufgezeichnete Makro
wunderbar. Für temporäre Bedürfnisse ist das auf jeden Fall nützlich.
Bei deinem Makro, das bereits mit Variablen arbeitet, möchte ich
annehmen, dass dementsprechend die Variable" von" einen Bereich
beschreibt und die Variable "nach" die linke obere Zelle des
Zielbereichs. Dann funktioniert das auch grundsätzlich mit verschieden
großen Quellbereichen.
Aber du musst dir immer bewusst sein: Der Makro-Rekorder zeichnet die
Aktionen in der Oberfläche auf, die sich schneller mal ändert (z.B.
Menü-Befehle), während die Uno-Befehle konstant bleiben sollten. Du
musst dir also grundsätzlich überlegen: Machst du etwas "schnell
erledigt und nicht für die Ewigkeit"("quick and dirty") oder
längerfristig haltbar. Gerade bei diesem Beispiel sind das ganz
unterschiedliche Vorgehensweisen, und man kann nicht sagen, dass eine
schlechter als die andere sei. Aber bei den aufgezeichneten Makros, die
auf Oberflächenfunktionen basieren, nimmt man einfach in Kauf, dass sie
bei einem neuen Release neu erzeugt werden müssen.

Gruß

Gerhard



Am 18.04.2017 um 14:52 schrieb Günter Fritze:

>
>
> Am 18.04.2017 um 14:46 schrieb Günter Fritze:
>>
>>
>> Am 18.04.2017 um 14:29 schrieb Günter Fritze:
>>> Hallo zusammen!
>>>
>>> Vor längerer Zeit habe ich durch Makroaufzeichnung eine Prpzedur
>>> generieren lassen, die einen Tabellenbereich an eine andere Stelle
>>> kopiert.
>>>
>>> sub Copyall(von As Variant, nach As Variant)
>>> 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 = von
>>>
>>> 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 = nach
>>>
>>> dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
>>>
>>> rem
>>> ----------------------------------------------------------------------
>>> dim args4(5) as new com.sun.star.beans.PropertyValue
>>> args4(0).Name = "Flags"
>>> args4(0).Value = "A"
>>> args4(1).Name = "FormulaCommand"
>>> args4(1).Value = 0
>>> args4(2).Name = "SkipEmptyCells"
>>> args4(2).Value = false
>>> args4(3).Name = "Transpose"
>>> args4(3).Value = false
>>> args4(4).Name = "AsLink"
>>> args4(4).Value = false
>>> args4(5).Name = "MoveMode"
>>> args4(5).Value = 4
>>>
>>> dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0,
>>> args4())
>>>
>>>
>>> end sub
>>>
>>> Diese Prozedur funktionierte mindestens 6 Monate einwandfrei.
>>>
>>> Ich war jetzt gezwungen mein Linuxsystem LinuxMint neu zu installieren.
>>>
>>> Die neue Version ist.
>>>
>>> Version: 5.1.4.2
>>> Build-ID: 1:5.1.4-0ubuntu1
>>> CPU-Threads: 4; BS-Version: Linux 4.4; UI-Render: Standard;
>>> Gebietsschema: de-DE (de_DE.UTF-8)
>>>
>>> Die Kopien bringen teilweise unsinnige Ergebnisse. Ich habe nun eine
>>> neue Prozedure generieren lassen, und siehe da: Es geht wieder. Die
>>> einzigen Unterschiede sind in
>>>
>>> args4(5) steht statt der 4 eine 6.
>>>
>>> Vielleicht ist damit einem Mitstreiter geholfen.
>>>
>>> MfG
>>>
>>> Günter Fritze
>>>
>>>
>>
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
OoOHWHOoO OoOHWHOoO
Reply | Threaded
Open this post in threaded view
|

Re: Calc, Makroaufzeichnung,Bereiche kopieren

Hallo Gerhard,

"Paste" und "InsertContents" sind beides UNO-Befehle, die aber etwas
völlig unterschiedliches tun:

[1]   "Paste"   entspricht   "LO≡calc [Einfügen] -> [Einfügen]"
[2]   "InsertContents"   entspricht   "LO≡calc [Einfügen] -> [Einfügen]
[Inhalte Einfügen]"

Mit Unterschieden zwischen Makro-Programmierung und Makro-Aufzeichnung
hat das nichts zu tun, beides basiert in diesem Fall auf der Verwendung
von UNO-Befehlen.

LO basiert intern auf UNO-Befehlen und deshalb kann sich da für den
Anwender schon mal etwas ändern, wenn LO-intern etwas geändert wird.

Das andere sind die Makro-Programmiersprachen wie z.B. die BASIC-IDE
(Integrated Development Environment), welche auch die Möglichkeit zur
Bearbeitung von z.B. "LO≡calc"-Dokumenten beinhalten, nur heißen da die
Befehle anders. Sie stellen quasi eine Oberfläche dar, die auf die
UNO-Befehle "aufgesetzt" ist. Man kann auch (einfach ausgedrückt) sagen,
dass sie die UNO-Befehle "kapseln/verbergen" und der "Kapsel" einen
anderen (Befehls-) Namen geben.

[3]   Beispiel: Nur den Inhalt der Zellen A1:A15 nach D1:D15 kopieren

[3.1]   Makro BASIC

dim aData()
dim oTab as variant, oBereich as Variant, oZielbereich as Variant
oTab = thisComponent.sheets(0)
oBereich = oTab.getCellRangeByName("A1:A15")
aData = oBereich.getDataArray()
oZielbereich = oTab.getCellRangeByName("D1:D15")
oZielbereich.setDataArray(aData)

[3.2]   Makro UNO

dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$A$15"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$D$1:$D$15"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

Beide Makros sind in ihrer Wirkung identisch. Das BASIC Makro benutzt,
für den Benutzer unsichtbar, LO-intern auch die UNO-Befehle.

[4]   Vorteile/Nachteile

[4.1]   BASIC Makro
[4.1.1]   Vorteile: Änderungen auf der UNO-Ebene wirken sich (für den
Benutzer) nicht aus, das sie (hoffentlich immer) von den LO-Entwicklern
"eingepflegt" werden.
[4.1.2]   Nachteile: Für manche Aktionen, die man z.B. mit
"LO≡calc"-Dokumenten machen kann, gibt es keine BASIC-Befehle.

[4.2]   UNO Makro
[4.2.1]   Vorteile: Man kann mit "LO≡calc"-Dokumenten Dinge tun, für die
es keine BASIC-Befehle gibt.
[4.2.2]   Nachteile: LO-interne Änderungen bei UNO-Befehlen muss man
selbst "nachkorrigieren".

[5] Literatur

Sehr empfehlenswert, da sehr ausführlich:

[ENG]   http://www.pitonyak.org/OOME_3_0.pdf
[ENG]   http://www.pitonyak.org/OOME_3_0.odt

Deutsche Übersetzung von "Pitonyak":

[DEU]  
https://www.uni-due.de/~abi070/files/OOo/OOME/OOME_3_0_deutsch.pdf
[DEU]   https://www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.odt

Weitere Makro-Beispiele:

[DEU]   https://www.wollmux.net/wiki/images/f/f9/Makro_Kochbuch.pdf

Ich bin jetzt auch nicht der "große & erfahrene" Makro-Programmierer,
aber im "Großen & Ganzen" sollte das schon passen, was ich da
kommuniziert habe,

Gruß Hans-Werner


------ Originalnachricht ------
Von: "Gerhard Weydt" <[hidden email]>
An: [hidden email]
Gesendet: 20.08.2017 01:25:53
Betreff: Re: [de-users] Calc, Makroaufzeichnung,Bereiche kopieren

>Hallo Günter,
>
>beim Aufräumen in meinem Postfach habe ich die angehängte Mail
>gefunden. Da war ja keine Antwort vonnöten, aber ich hatte sie wohl mal
>stehen lassen, um zu sehen, ob da noch was kommt.
>
>Aber ich denke, dass das ein typisches Beispiel ist, wie sich
>Makro-Aufzeichnung und Programmierung mit Uno unterscheiden. Ich
>spekuliere da ein bisschen, weil ich auch nicht genau weiß, was
>wirklich im Programm passiert, aber ich glaube doch, dass ich im
>Wesentlichen das Richtige treffe.
>Ich habe versucht, ein entsprechendes Makro aufzuzeichnen, aber statt
>des komplizierten "InsertContents" wurde bei mir nur ein "Paste"
>generiert, ich kann nicht sagen, ob das am Release oder etwas anderem
>liegt. Aber sei's drum: entweder das oder die Änderung der Wertes des
>Parameters "args4(5).Value", die du herausgefunden hast, zeigen in die
>selbe Richtung: die Aufzeichnung nimmt die aktuellen Werte, die in der
>Programmierung der Oberfläche verwendet werden, und die können sich
>schnell mal ändern, weil es eben direkte Werte sind; wenn man Uno
>verwendet, gibt es Variablen, die auch nach Änderungen den gleichen
>Namen, aber evtl. anderen Inhalt haben.
>Wenn man Uno-Befehle verwendet, findet man (für ein Datenblatt) die
>Befehle CopyRange und MoveRange, bei denen man den Quellbereich und die
>linke obere Zelle des Ziels benennt. Das ist auch ein anderes Vorgehen
>als in der Oberfläche, die erst selektiert, dann erst sagt, was
>passieren soll, und zum Schluss, wo. Ich habe diese Befehle nicht
>konsequent ausprobiert, aber sie sollten die Aufgabenstellung
>grundsätzlich und release-unabhängig lösen.
>Wenn man häufig die gleiche Aufgabenstellung hat, also hier: ich habe
>einen Bereich in einer Calc-Tabelle markiert und möchte den irgendwo
>anders hinkopieren, dann funktioniert das aufgezeichnete Makro
>wunderbar. Für temporäre Bedürfnisse ist das auf jeden Fall nützlich.
>Bei deinem Makro, das bereits mit Variablen arbeitet, möchte ich
>annehmen, dass dementsprechend die Variable" von" einen Bereich
>beschreibt und die Variable "nach" die linke obere Zelle des
>Zielbereichs. Dann funktioniert das auch grundsätzlich mit verschieden
>großen Quellbereichen.
>Aber du musst dir immer bewusst sein: Der Makro-Rekorder zeichnet die
>Aktionen in der Oberfläche auf, die sich schneller mal ändert (z.B.
>Menü-Befehle), während die Uno-Befehle konstant bleiben sollten. Du
>musst dir also grundsätzlich überlegen: Machst du etwas "schnell
>erledigt und nicht für die Ewigkeit"("quick and dirty") oder
>längerfristig haltbar. Gerade bei diesem Beispiel sind das ganz
>unterschiedliche Vorgehensweisen, und man kann nicht sagen, dass eine
>schlechter als die andere sei. Aber bei den aufgezeichneten Makros, die
>auf Oberflächenfunktionen basieren, nimmt man einfach in Kauf, dass sie
>bei einem neuen Release neu erzeugt werden müssen.
>
>Gruß
>
>Gerhard
>
>
>
>Am 18.04.2017 um 14:52 schrieb Günter Fritze:
>>
>>
>>Am 18.04.2017 um 14:46 schrieb Günter Fritze:
>>>
>>>
>>>Am 18.04.2017 um 14:29 schrieb Günter Fritze:
>>>>Hallo zusammen!
>>>>
>>>>Vor längerer Zeit habe ich durch Makroaufzeichnung eine Prpzedur
>>>>generieren lassen, die einen Tabellenbereich an eine andere Stelle
>>>>kopiert.
>>>>
>>>>sub Copyall(von As Variant, nach As Variant)
>>>>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 = von
>>>>
>>>>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 = nach
>>>>
>>>>dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0,
>>>>args3())
>>>>
>>>>rem
>>>>----------------------------------------------------------------------
>>>>dim args4(5) as new com.sun.star.beans.PropertyValue
>>>>args4(0).Name = "Flags"
>>>>args4(0).Value = "A"
>>>>args4(1).Name = "FormulaCommand"
>>>>args4(1).Value = 0
>>>>args4(2).Name = "SkipEmptyCells"
>>>>args4(2).Value = false
>>>>args4(3).Name = "Transpose"
>>>>args4(3).Value = false
>>>>args4(4).Name = "AsLink"
>>>>args4(4).Value = false
>>>>args4(5).Name = "MoveMode"
>>>>args4(5).Value = 4
>>>>
>>>>dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0,
>>>>args4())
>>>>
>>>>
>>>>end sub
>>>>
>>>>Diese Prozedur funktionierte mindestens 6 Monate einwandfrei.
>>>>
>>>>Ich war jetzt gezwungen mein Linuxsystem LinuxMint neu zu
>>>>installieren.
>>>>
>>>>Die neue Version ist.
>>>>
>>>>Version: 5.1.4.2
>>>>Build-ID: 1:5.1.4-0ubuntu1
>>>>CPU-Threads: 4; BS-Version: Linux 4.4; UI-Render: Standard;
>>>>Gebietsschema: de-DE (de_DE.UTF-8)
>>>>
>>>>Die Kopien bringen teilweise unsinnige Ergebnisse. Ich habe nun eine
>>>>neue Prozedure generieren lassen, und siehe da: Es geht wieder. Die
>>>>einzigen Unterschiede sind in
>>>>
>>>>args4(5) steht statt der 4 eine 6.
>>>>
>>>>Vielleicht ist damit einem Mitstreiter geholfen.
>>>>
>>>>MfG
>>>>
>>>>Günter Fritze
>>>>
>>>>
>>>
>>
>>
>
>
>-- Liste abmelden mit E-Mail an: [hidden email]
>Probleme?
>http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
>Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
>Listenarchiv: http://listarchives.libreoffice.org/de/users/
>Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
OoOHWHOoO OoOHWHOoO
Reply | Threaded
Open this post in threaded view
|

Re: Calc, Makroaufzeichnung,Bereiche kopieren

KORREKTUR

Bei [2] ist ein "Einfügen" zu viel.

RICHTIG: [2] "InsertContents"   entspricht   "LO≡calc [Einfügen] ->
[Inhalte Einfügen]"


------ Originalnachricht ------
Von: "OoOHWHOoO" <[hidden email]>
An: "[hidden email]" <[hidden email]>
Cc: "OoOHWHOoO" <[hidden email]>
Gesendet: 20.08.2017 08:39:57
Betreff: Re: [de-users] Calc, Makroaufzeichnung,Bereiche kopieren

>Hallo Gerhard,
>
>"Paste" und "InsertContents" sind beides UNO-Befehle, die aber etwas
>völlig unterschiedliches tun:
>
>[1]   "Paste"   entspricht   "LO≡calc [Einfügen] -> [Einfügen]"
>[2]   "InsertContents"   entspricht   "LO≡calc [Einfügen] -> [Einfügen]
>[Inhalte Einfügen]"
>
>Mit Unterschieden zwischen Makro-Programmierung und Makro-Aufzeichnung
>hat das nichts zu tun, beides basiert in diesem Fall auf der Verwendung
>von UNO-Befehlen.
>
>LO basiert intern auf UNO-Befehlen und deshalb kann sich da für den
>Anwender schon mal etwas ändern, wenn LO-intern etwas geändert wird.
>
>Das andere sind die Makro-Programmiersprachen wie z.B. die BASIC-IDE
>(Integrated Development Environment), welche auch die Möglichkeit zur
>Bearbeitung von z.B. "LO≡calc"-Dokumenten beinhalten, nur heißen da die
>Befehle anders. Sie stellen quasi eine Oberfläche dar, die auf die
>UNO-Befehle "aufgesetzt" ist. Man kann auch (einfach ausgedrückt)
>sagen, dass sie die UNO-Befehle "kapseln/verbergen" und der "Kapsel"
>einen anderen (Befehls-) Namen geben.
>
>[3]   Beispiel: Nur den Inhalt der Zellen A1:A15 nach D1:D15 kopieren
>
>[3.1]   Makro BASIC
>
>dim aData()
>dim oTab as variant, oBereich as Variant, oZielbereich as Variant
>oTab = thisComponent.sheets(0)
>oBereich = oTab.getCellRangeByName("A1:A15")
>aData = oBereich.getDataArray()
>oZielbereich = oTab.getCellRangeByName("D1:D15")
>oZielbereich.setDataArray(aData)
>
>[3.2]   Makro UNO
>
>dim document as object
>dim dispatcher as object
>document = ThisComponent.CurrentController.Frame
>dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
>dim args1(0) as new com.sun.star.beans.PropertyValue
>args1(0).Name = "ToPoint"
>args1(0).Value = "$A$1:$A$15"
>dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
>dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
>dim args3(0) as new com.sun.star.beans.PropertyValue
>args3(0).Name = "ToPoint"
>args3(0).Value = "$D$1:$D$15"
>dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
>dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
>
>Beide Makros sind in ihrer Wirkung identisch. Das BASIC Makro benutzt,
>für den Benutzer unsichtbar, LO-intern auch die UNO-Befehle.
>
>[4]   Vorteile/Nachteile
>
>[4.1]   BASIC Makro
>[4.1.1]   Vorteile: Änderungen auf der UNO-Ebene wirken sich (für den
>Benutzer) nicht aus, das sie (hoffentlich immer) von den LO-Entwicklern
>"eingepflegt" werden.
>[4.1.2]   Nachteile: Für manche Aktionen, die man z.B. mit
>"LO≡calc"-Dokumenten machen kann, gibt es keine BASIC-Befehle.
>
>[4.2]   UNO Makro
>[4.2.1]   Vorteile: Man kann mit "LO≡calc"-Dokumenten Dinge tun, für
>die es keine BASIC-Befehle gibt.
>[4.2.2]   Nachteile: LO-interne Änderungen bei UNO-Befehlen muss man
>selbst "nachkorrigieren".
>
>[5] Literatur
>
>Sehr empfehlenswert, da sehr ausführlich:
>
>[ENG]   http://www.pitonyak.org/OOME_3_0.pdf
>[ENG]   http://www.pitonyak.org/OOME_3_0.odt
>
>Deutsche Übersetzung von "Pitonyak":
>
>[DEU]  
>https://www.uni-due.de/~abi070/files/OOo/OOME/OOME_3_0_deutsch.pdf
>[DEU]  
>https://www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.odt
>
>Weitere Makro-Beispiele:
>
>[DEU]   https://www.wollmux.net/wiki/images/f/f9/Makro_Kochbuch.pdf
>
>Ich bin jetzt auch nicht der "große & erfahrene" Makro-Programmierer,
>aber im "Großen & Ganzen" sollte das schon passen, was ich da
>kommuniziert habe,
>
>Gruß Hans-Werner
>
>
>------ Originalnachricht ------
>Von: "Gerhard Weydt" <[hidden email]>
>An: [hidden email]
>Gesendet: 20.08.2017 01:25:53
>Betreff: Re: [de-users] Calc, Makroaufzeichnung,Bereiche kopieren
>
>>Hallo Günter,
>>
>>beim Aufräumen in meinem Postfach habe ich die angehängte Mail
>>gefunden. Da war ja keine Antwort vonnöten, aber ich hatte sie wohl
>>mal stehen lassen, um zu sehen, ob da noch was kommt.
>>
>>Aber ich denke, dass das ein typisches Beispiel ist, wie sich
>>Makro-Aufzeichnung und Programmierung mit Uno unterscheiden. Ich
>>spekuliere da ein bisschen, weil ich auch nicht genau weiß, was
>>wirklich im Programm passiert, aber ich glaube doch, dass ich im
>>Wesentlichen das Richtige treffe.
>>Ich habe versucht, ein entsprechendes Makro aufzuzeichnen, aber statt
>>des komplizierten "InsertContents" wurde bei mir nur ein "Paste"
>>generiert, ich kann nicht sagen, ob das am Release oder etwas anderem
>>liegt. Aber sei's drum: entweder das oder die Änderung der Wertes des
>>Parameters "args4(5).Value", die du herausgefunden hast, zeigen in die
>>selbe Richtung: die Aufzeichnung nimmt die aktuellen Werte, die in der
>>Programmierung der Oberfläche verwendet werden, und die können sich
>>schnell mal ändern, weil es eben direkte Werte sind; wenn man Uno
>>verwendet, gibt es Variablen, die auch nach Änderungen den gleichen
>>Namen, aber evtl. anderen Inhalt haben.
>>Wenn man Uno-Befehle verwendet, findet man (für ein Datenblatt) die
>>Befehle CopyRange und MoveRange, bei denen man den Quellbereich und
>>die linke obere Zelle des Ziels benennt. Das ist auch ein anderes
>>Vorgehen als in der Oberfläche, die erst selektiert, dann erst sagt,
>>was passieren soll, und zum Schluss, wo. Ich habe diese Befehle nicht
>>konsequent ausprobiert, aber sie sollten die Aufgabenstellung
>>grundsätzlich und release-unabhängig lösen.
>>Wenn man häufig die gleiche Aufgabenstellung hat, also hier: ich habe
>>einen Bereich in einer Calc-Tabelle markiert und möchte den irgendwo
>>anders hinkopieren, dann funktioniert das aufgezeichnete Makro
>>wunderbar. Für temporäre Bedürfnisse ist das auf jeden Fall nützlich.
>>Bei deinem Makro, das bereits mit Variablen arbeitet, möchte ich
>>annehmen, dass dementsprechend die Variable" von" einen Bereich
>>beschreibt und die Variable "nach" die linke obere Zelle des
>>Zielbereichs. Dann funktioniert das auch grundsätzlich mit verschieden
>>großen Quellbereichen.
>>Aber du musst dir immer bewusst sein: Der Makro-Rekorder zeichnet die
>>Aktionen in der Oberfläche auf, die sich schneller mal ändert (z.B.
>>Menü-Befehle), während die Uno-Befehle konstant bleiben sollten. Du
>>musst dir also grundsätzlich überlegen: Machst du etwas "schnell
>>erledigt und nicht für die Ewigkeit"("quick and dirty") oder
>>längerfristig haltbar. Gerade bei diesem Beispiel sind das ganz
>>unterschiedliche Vorgehensweisen, und man kann nicht sagen, dass eine
>>schlechter als die andere sei. Aber bei den aufgezeichneten Makros,
>>die auf Oberflächenfunktionen basieren, nimmt man einfach in Kauf,
>>dass sie bei einem neuen Release neu erzeugt werden müssen.
>>
>>Gruß
>>
>>Gerhard
>>
>>
>>
>>Am 18.04.2017 um 14:52 schrieb Günter Fritze:
>>>
>>>
>>>Am 18.04.2017 um 14:46 schrieb Günter Fritze:
>>>>
>>>>
>>>>Am 18.04.2017 um 14:29 schrieb Günter Fritze:
>>>>>Hallo zusammen!
>>>>>
>>>>>Vor längerer Zeit habe ich durch Makroaufzeichnung eine Prpzedur
>>>>>generieren lassen, die einen Tabellenbereich an eine andere Stelle
>>>>>kopiert.
>>>>>
>>>>>sub Copyall(von As Variant, nach As Variant)
>>>>>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 = von
>>>>>
>>>>>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 = nach
>>>>>
>>>>>dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0,
>>>>>args3())
>>>>>
>>>>>rem
>>>>>----------------------------------------------------------------------
>>>>>dim args4(5) as new com.sun.star.beans.PropertyValue
>>>>>args4(0).Name = "Flags"
>>>>>args4(0).Value = "A"
>>>>>args4(1).Name = "FormulaCommand"
>>>>>args4(1).Value = 0
>>>>>args4(2).Name = "SkipEmptyCells"
>>>>>args4(2).Value = false
>>>>>args4(3).Name = "Transpose"
>>>>>args4(3).Value = false
>>>>>args4(4).Name = "AsLink"
>>>>>args4(4).Value = false
>>>>>args4(5).Name = "MoveMode"
>>>>>args4(5).Value = 4
>>>>>
>>>>>dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0,
>>>>>args4())
>>>>>
>>>>>
>>>>>end sub
>>>>>
>>>>>Diese Prozedur funktionierte mindestens 6 Monate einwandfrei.
>>>>>
>>>>>Ich war jetzt gezwungen mein Linuxsystem LinuxMint neu zu
>>>>>installieren.
>>>>>
>>>>>Die neue Version ist.
>>>>>
>>>>>Version: 5.1.4.2
>>>>>Build-ID: 1:5.1.4-0ubuntu1
>>>>>CPU-Threads: 4; BS-Version: Linux 4.4; UI-Render: Standard;
>>>>>Gebietsschema: de-DE (de_DE.UTF-8)
>>>>>
>>>>>Die Kopien bringen teilweise unsinnige Ergebnisse. Ich habe nun
>>>>>eine neue Prozedure generieren lassen, und siehe da: Es geht
>>>>>wieder. Die einzigen Unterschiede sind in
>>>>>
>>>>>args4(5) steht statt der 4 eine 6.
>>>>>
>>>>>Vielleicht ist damit einem Mitstreiter geholfen.
>>>>>
>>>>>MfG
>>>>>
>>>>>Günter Fritze
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>>-- Liste abmelden mit E-Mail an: [hidden email]
>>Probleme?
>>http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
>>Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
>>Listenarchiv: http://listarchives.libreoffice.org/de/users/
>>Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
>
>
>-- Liste abmelden mit E-Mail an: [hidden email]
>Probleme?
>http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
>Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
>Listenarchiv: http://listarchives.libreoffice.org/de/users/
>Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Christian Palm-2 Christian Palm-2
Reply | Threaded
Open this post in threaded view
|

Aw: Re: [de-users] Calc, Makroaufzeichnung,Bereiche kopieren

Hallo ihr,

Was mir zu beginn auch viel geholfen hat war:

http://www.starbasicfaq.de/
(von mir seit 07.07.2012 als gültig ausprobiert)

Zum Einstieg war für mich auch ganz nützlich
http://www.ooowiki.de/
(von mir seit 07.07.2012 als gültig ausprobiert) weil die Programmiersprache meist von allem Unabhängig ist. Meist weil an sich jeder ein kleines bischen was anderes macht. Auf der Verpackung steht halt überall BASIC oder so drauf aber die Feinheiten machen den Unterschied.

Gruß
Christian Palm


> Gesendet: Sonntag, 20. August 2017 um 08:59 Uhr
> Von: OoOHWHOoO <[hidden email]>
> An: "[hidden email]" <[hidden email]>
> Cc: OoOHWHOoO <[hidden email]>
> Betreff: Re: [de-users] Calc, Makroaufzeichnung,Bereiche kopieren
...

--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Günter Fritze Günter Fritze
Reply | Threaded
Open this post in threaded view
|

QUOTIENT im Makro

In reply to this post by Günter Fritze
Hallo,
Wie kann man die Funktion Quotient im Makro verwenden. Für die Funktion
REST gibt es ja die Funktion MOD.
Vielen Dank im Voraus.
Mit freundlichen Grüßen
Günter


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Gerhard Weydt Gerhard Weydt
Reply | Threaded
Open this post in threaded view
|

Re: QUOTIENT im Makro

Hallo Günter,

die genaue Bedeutung deiner Frage ist mir nicht klar, denn der Quotient
ist einfach das Ergebnis einer Division. Aber wegen der Erwähnung des
Rests bei der Division habe ich zumindest einen Verdacht.
Der Operator "/" dividiert zwei Werte, was dabei typ- und wertmäßig
rauskommt, hängt irgendwie auch von den Ausgangswerten ab, das muss man
aber genauer ausprobieren. Zum Beispiel liefert die Division zweier
Integer oder Long, z.B. 7/3, den ziemlich genauen Wert 2,33333333333333,
also eine Zahl mit Nachkommastellen.
Ich könnte mir vorstellen, dass es dir um ganzzahlige Division geht. Da
gibt es den Operator "\". Da liefert die Operation 7\3 den Wert 2. Den
Wert 2 kriegst du zwar auch, wenn du das Ergebnis 7/3 einem Integer-
oder Long-Wert zuweist, aber einen Ausdruck mit dem Operator "\" kannst
du auch gleich in einer größeren Formel weiterverwenden und brauchst
keinen Zwischenschritt mit einer neuen Variablen.
Wenn du was anderes meinst, melde dich wieder.

Gerhard

Am 12.10.2017 um 00:30 schrieb Günter Fritze:
> Hallo,
> Wie kann man die Funktion Quotient im Makro verwenden. Für die
> Funktion REST gibt es ja die Funktion MOD.
> Vielen Dank im Voraus.
> Mit freundlichen Grüßen
> Günter
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Günter Fritze Günter Fritze
Reply | Threaded
Open this post in threaded view
|

Re: QUOTIENT im Makro

Hallo Gerhard,

Vielen Dank für Deine schnelle Antwort. Das "\" kenne ich aus anderen
Programmiersprachen. Ich habe es garnicht erst probiert, in den
"Makro-Büchern", die ich habe sind die Angaben sehr spärlich, "\" gibt
es garnicht, aber es funktioniert. "MOD" habe ich in einem von vier
Büchern nur in einer Liste von Operatoren gefunden.

Nun funktioniert alles, wie beabsichtigt. Warum das Alles: Wichtig!,
Berechnung der Beiträge in einer Skatrunde

Herzliche Grüße
Günter

Am 12.10.2017 um 00:58 schrieb Gerhard Weydt:

> Hallo Günter,
>
> die genaue Bedeutung deiner Frage ist mir nicht klar, denn der
> Quotient ist einfach das Ergebnis einer Division. Aber wegen der
> Erwähnung des Rests bei der Division habe ich zumindest einen Verdacht.
> Der Operator "/" dividiert zwei Werte, was dabei typ- und wertmäßig
> rauskommt, hängt irgendwie auch von den Ausgangswerten ab, das muss
> man aber genauer ausprobieren. Zum Beispiel liefert die Division
> zweier Integer oder Long, z.B. 7/3, den ziemlich genauen Wert
> 2,33333333333333, also eine Zahl mit Nachkommastellen.
> Ich könnte mir vorstellen, dass es dir um ganzzahlige Division geht.
> Da gibt es den Operator "\". Da liefert die Operation 7\3 den Wert 2.
> Den Wert 2 kriegst du zwar auch, wenn du das Ergebnis 7/3 einem
> Integer- oder Long-Wert zuweist, aber einen Ausdruck mit dem Operator
> "\" kannst du auch gleich in einer größeren Formel weiterverwenden und
> brauchst keinen Zwischenschritt mit einer neuen Variablen.
> Wenn du was anderes meinst, melde dich wieder.
>
> Gerhard
>
> Am 12.10.2017 um 00:30 schrieb Günter Fritze:
>> Hallo,
>> Wie kann man die Funktion Quotient im Makro verwenden. Für die
>> Funktion REST gibt es ja die Funktion MOD.
>> Vielen Dank im Voraus.
>> Mit freundlichen Grüßen
>> Günter
>>
>>
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Thomas Krumbein-3 Thomas Krumbein-3
Reply | Threaded
Open this post in threaded view
|

Re: QUOTIENT im Makro

Hallo Günter,

keine Ahnung, welche "Makro-Bücher" Du besitzt - es gibt eigentlich nur
ein sinnvolles deutschsprachiges Werk - und das sind beide Operatoren
inkl. eines Kurzbeispiels aufgeführt;)

Du findest das Werk auch in der Literaturliste auf der Homepage von
LibreOffice -> Hilfe -> Literatur ;)

Viele Güße

Thomas


Am 12.10.2017 um 10:13 schrieb Günter Fritze:
> Hallo Gerhard,
>
> Vielen Dank für Deine schnelle Antwort. Das "\" kenne ich aus anderen
> Programmiersprachen. Ich habe es garnicht erst probiert, in den
> "Makro-Büchern", die ich habe sind die Angaben sehr spärlich, "\" gibt
> es garnicht, aber es funktioniert. "MOD" habe ich in einem von vier
> Büchern nur in einer Liste von Operatoren gefunden.
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Günter Fritze Günter Fritze
Reply | Threaded
Open this post in threaded view
|

Re: QUOTIENT im Makro

Hallo Thomas,

Thomas Krumbein: Makro Kochbuch. Kein Hinweis, weder im
Inhaltsverzeichnis, noch im Index

Rene Martin: Open Office-Programmierung: Kein Hinweis, weder im
Inhaltsverzeichnis, noch im Index

Redaktion Toolbox: OpenOffice.org Basic : "MOD" in Liste S 42

Thomas Krumbein: Makros in OpenOffice.org 2.0. : Ich krieche zu Kreuze,
hier gibt es eine Tabelle unter Operatoren. Auf Operatoren zu suchen,
bin ich nicht gekommen. Gut finde ich in manchen Büchern, z.B. über
Perl, wenn die einzelzeichen-Operatoren, furchtbares Wort, im Index am
Anfang stehen.

Viele Grüße
Günter

Am 12.10.2017 um 11:32 schrieb Thomas Krumbein:

> Hallo Günter,
>
> keine Ahnung, welche "Makro-Bücher" Du besitzt - es gibt eigentlich
> nur ein sinnvolles deutschsprachiges Werk - und das sind beide
> Operatoren inkl. eines Kurzbeispiels aufgeführt;)
>
> Du findest das Werk auch in der Literaturliste auf der Homepage von
> LibreOffice -> Hilfe -> Literatur ;)
>
> Viele Güße
>
> Thomas
>
>
> Am 12.10.2017 um 10:13 schrieb Günter Fritze:
>> Hallo Gerhard,
>>
>> Vielen Dank für Deine schnelle Antwort. Das "\" kenne ich aus anderen
>> Programmiersprachen. Ich habe es garnicht erst probiert, in den
>> "Makro-Büchern", die ich habe sind die Angaben sehr spärlich, "\"
>> gibt es garnicht, aber es funktioniert. "MOD" habe ich in einem von
>> vier Büchern nur in einer Liste von Operatoren gefunden.
>>
>>
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert