Hallo Wolfgang und Andreas ...
[1] Stimmt, Zell-Verweise werden "zerschossen". Danke für den Hinweis.
[2] Die "dannenhoefer"-Aussage bezieht auf BasicMakro-Programmierung
ohne "uno"-Kommandos.
[3] Makro-Aufzeichnung machte ich auch, aber als Lösung verworfen wegen
der "uno"-Kommandos.
[4] So sollte es gehen:
Sub InsertRow
Dim oDoc as Object ' object Document
Dim oSheet as Object ' object Sheet
Dim oRow as Object ' object Row
Dim iCol as Long ' index Column (i=0 => 1st Column)
Dim iColMax as Long ' index Column Maximum
Dim NF as Long ' Number Format
Dim iRowIns as Long ' index Row Insert (i=0 => 1st Row )
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oRow = oSheet.getRows
iRowIns = 1
iColMax = 3 ' Muss gegebenenfalls angepasst werden ((i=0 => 1st
Column)) !
oRow.insertByIndex(iRowIns,1) ' Zeile einfügen
For iCol=0 To iColMax Step 1
NF = oSheet.getCellByPosition(iCol,iRowIns+1).NumberFormat '
Zell-Format lesen
oSheet.getCellByPosition(iCol,iRowIns).NumberFormat = NF '
Zell-Format schreiben
Next iCol
End Sub
Aus
Datum Zeile Text Link
02.07.2018 02,000 TextZeile2 =C6
03.07.2018 03,000 TextZeile3 =C5
04.07.2018 04,000 TextZeile4 =C4
05.07.2018 05,000 TextZeile5 =C3
06.07.2018 06,000 TextZeile6 =C2
wird
Datum Zeile Text Link
02.07.2018 02,000 TextZeile2 =C7
03.07.2018 03,000 TextZeile3 =C6
04.07.2018 04,000 TextZeile4 =C5
05.07.2018 05,000 TextZeile5 =C4
06.07.2018 06,000 TextZeile6 =C3
Die Zell-Formate für die eingefügte Zeile werden von der nachfolgenden
Zeile kopiert.
Gruß
Hans-Werner :-))
------ Originalnachricht ------
Von: "Wolfgang Jäth" <jawo.ml.hams...@arcor.de>
An: users@de.libreoffice.org
Gesendet: 27.07.2018 12:52:41
Betreff: Re: [de-users] Calc: Neue Zeile direkt unter
Spaltenüberschrift-Zeile einfuegen
Am 27.07.2018 um 10:59 schrieb OoOHWHOoO:
Das Makro (s.u.)
[1] fügt nach der 2. Zeile eine Zeile ein.
[2] kopiert die Inhalte der 2. Zeile in die neu eingefügte Zeile.
Vorsicht; wenn in der 2. Zeile Verweise auf andere Zeilen (z.b. auf die
ursprüngliche Zeile 3, jetzt Zeile 4; passiert so aber auch mit jeder
beliebigen andern Zeile) stehen sollten, fällst du damit auf die
Schnauze. Denn du kopierst den jetzigen Link von z. B. 2 auf 4 nach 3,
von wo aus er natürlich ebenfalls 1 Zeile weiter als ursprünglich
gedacht (d. h. also nach 5 statt 4) verweist, usw.
Einen einfachen COPY-Befehl für Zeilen gibt es offensichtlich nicht in
Makro Basic ( http://www.dannenhoefer.de "7.4.5 Wie kann man Zeilen
oder
Spalten kopieren ?" ).
Jein; man kann ihn einfach aufzeichnen. Zur Demonstration füll mal ein
leeres Blatt mit folgenden Werten (A1-E8):
Zeile Buchstabe Buchstabe Text Link
2 A f Anton =D3
3 B h Berta =D4
4 C i Charlotte =D5
5 D j Annette =D6
6 E k Anna =D7
Doris
Als Makro schreibst du (das ist ein bisschen aufgepimpft, aber im
Prinzip nix anderes als "Extras => Makros => Aufzeichnen => <Markieren
des Bereichs A1:ZZ1> => Kopieren => <Rechtsklick auf Zeilenkopf von
Zeile 2> => Zeilen einfügen => <Rechtsklick auf Zeilenkopf von Zeile 2>
=> Inhalte Einfügen => <alles aus bis auf [X] Zahlen, [X] Formeln, [X]
Formate>"; unglücklicherweise zeichnen Makros nicht Plain Basic auf,
sondern UNO-Funktionen, und die sind leider nirgends vernünftig
dokumentiert; kann man also de Fakto nur per Makro-Aufzeichnen
verwenden):
sub CopyXXX
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$5:ZZ5"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem
--------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem
--------------------------------------------------------------------
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem
--------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertRows", "", 0, Array())
rem
--------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "VFT"
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
rem ====
Btw, das "VFT" im letzten Arrray stellt die Flags dar, die bestimmen,
was genau kopiert werden soll:
V = Value
F = Formula
T = Format
D. h. das "V" müsste für den echten Einsatz dann vermutlich raus. Was
die entsprechenden Parameter für andere Optionen wie z. B. Datum o. ä.
wären, müsstest du per Makro-Aufzeichnen ausprobieren.
Und statt A5:ZZ5 suchst du dir die Zeile bzw. den Bereich deines
größten
Vertrauens [tm].
Wolfgang, UNO hassend (weil da nix, aber auch wirklich nix *vernünftig*
dokumentiert ist. Paradoxerweise /sind/ die einzelnen Methoden und
Parameter usw. ja durchaus dokumentiert, aber um diese Dokus zu
/finden/, musst du /vorher/ schon genau /wissen/, wie der Befehl und
seine übergeordneten Objekte (und deren übergeordneten Objekte usw.)
heißen, welche Parameter er hat (d. h. welche Parameterkombination du
verwenden möchtest), usw.; nur, wenn du das /eh/ schon alles weißt,
brauchst du auch keine Dokumentation mehr; völlig bescheuert :-((( )
--
Durch Donald Trump ist mir endgültig klar geworden: Es ist
nicht der Turm von Pisa, der schief steht, es ist die Welt!
--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy