Calc Kopieren mit "Inhalte einfügen"
Moderator: Moderatoren
Calc Kopieren mit "Inhalte einfügen"
Hallo,
ich möchte in Calc per Makro Formelzellen Kopieren mit der Option "Inhalte einfügen" , so dass nur die Werte übernommen werden. Wie macht man das (aber möglichst ohne dispatcher)?
Gruss, wonk
ich möchte in Calc per Makro Formelzellen Kopieren mit der Option "Inhalte einfügen" , so dass nur die Werte übernommen werden. Wie macht man das (aber möglichst ohne dispatcher)?
Gruss, wonk
Re: Calc Kopieren mit "Inhalte einfügen"
Wenn es nur um Werte geht ist das doch der allereinfachste Fall:
Den Wert in Tabelle "Tabelle1" aus Zelle A1 in B1:
Gruß
Stephan
Den Wert in Tabelle "Tabelle1" aus Zelle A1 in B1:
Code: Alles auswählen
tab = ThisComponent.Sheets().getByName("Tabelle1")
tab.getCellRangeByName("B1").Value = tab.getCellRangeByName("A1").Value
Gruß
Stephan
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo,
danke, manchmal sieht man das Naheliegende nicht.
Aber wenn ich das richtig sehe, gibt es dort keine Möglichkeit für ganze Bereiche? Ich muss das in einer Schleife über alle Spalten und Reihen machen?
Das Kopieren von Formelzellen mit Formelanpassung funktioniert auch nur im Schleifenverfahren!?
Gruss, wonk
danke, manchmal sieht man das Naheliegende nicht.
Aber wenn ich das richtig sehe, gibt es dort keine Möglichkeit für ganze Bereiche? Ich muss das in einer Schleife über alle Spalten und Reihen machen?
Das Kopieren von Formelzellen mit Formelanpassung funktioniert auch nur im Schleifenverfahren!?
Gruss, wonk
Re: Calc Kopieren mit "Inhalte einfügen"
Doch, die gibt es:Aber wenn ich das richtig sehe, gibt es dort keine Möglichkeit für ganze Bereiche?
Code: Alles auswählen
tab = ThisComponent.Sheets().getByName("Tabelle1")
daten = tab.getCellRangeByName("A1:A10").getDataArray()
tab.getCellRangeByName("B1:B10").setDataArray(daten)
Stephan
Re: Calc Kopieren mit "Inhalte einfügen"
Hm,
ich müßte eigentlich mit variablen Zeilenzahlen arbeiten. Ich habe deshalb ein Beispiel (zunächst mit Konstanten) mit CellRangeByPosition probiert.
Bereich = ThisComponent.Sheets(0).getCellRangeByPosition(2,1,4,10)
Daten= Bereich.getDataArray()
Bereich.getCellRangeByPosition(5,1,7,10).setDataArray(Daten)
Das wird aber so nicht akzeptiert, oder ist das so prinzipiell nicht möglich?
Übrigens: Ich suche immer noch eine Doku der Objekte mit allein Eigenschaften und Methoden!
Gruss, wonk
ich müßte eigentlich mit variablen Zeilenzahlen arbeiten. Ich habe deshalb ein Beispiel (zunächst mit Konstanten) mit CellRangeByPosition probiert.
Bereich = ThisComponent.Sheets(0).getCellRangeByPosition(2,1,4,10)
Daten= Bereich.getDataArray()
Bereich.getCellRangeByPosition(5,1,7,10).setDataArray(Daten)
Das wird aber so nicht akzeptiert, oder ist das so prinzipiell nicht möglich?
Übrigens: Ich suche immer noch eine Doku der Objekte mit allein Eigenschaften und Methoden!
Gruss, wonk
Re: Calc Kopieren mit "Inhalte einfügen"
wie denn auch, in erstr Zeile referenzierst Du ein Range-Objekt und in dritter Zeile willst Du, bezogen auf dieses Objekt, nochmals einen Zellbereich referenzieren.Das wird aber so nicht akzeptiert
richtig ist:
Code: Alles auswählen
Bereich = ThisComponent.Sheets(0)
Daten = Bereich.getCellRangeByPosition(2,1,4,10).getDataArray()
Bereich.getCellRangeByPosition(5,1,7,10).setDataArray(Daten)
Code: Alles auswählen
blatt = ThisComponent.Sheets(0)
Daten = blatt.getCellRangeByPosition(2,1,4,10).getDataArray()
blatt.getCellRangeByPosition(5,1,7,10).setDataArray(Daten)
diese Doku ist bei OO die sog. IDL-Referenz:Übrigens: Ich suche immer noch eine Doku der Objekte mit allein Eigenschaften und Methoden!
http://www.openoffice.org/api/docs/comm ... le-ix.html
GRuß
Stephan
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo,
danke, so nach und nach verstehe ich mehr, was ich eigentlich tue , auch wenn ich mit der Doku so meine Schwierigkieten habe.
Wenn ich das richtig sehe, ist aber nicht möglich, das Kopieren von Formelzellen mit Formelanpassung (z.B. 3 Zellen auf 30 Zellen) OHNE Schleifenkonstruktion zu erreichen!?
Gruss, wonk
danke, so nach und nach verstehe ich mehr, was ich eigentlich tue , auch wenn ich mit der Doku so meine Schwierigkieten habe.
Wenn ich das richtig sehe, ist aber nicht möglich, das Kopieren von Formelzellen mit Formelanpassung (z.B. 3 Zellen auf 30 Zellen) OHNE Schleifenkonstruktion zu erreichen!?
Gruss, wonk
Re: Calc Kopieren mit "Inhalte einfügen"
Das Kopieren mit Formelanpassung ist ohne Schleife auch nicht möglich wenn Quell- und Zielbereich gleich groß sind.Wenn ich das richtig sehe, ist aber nicht möglich, das Kopieren von Formelzellen mit Formelanpassung (z.B. 3 Zellen auf 30 Zellen) OHNE Schleifenkonstruktion zu erreichen!?
Sofern "Formelanpassung" nur das Anpassen von Zellbezügen meint, weiß ich aber auch nicht warum Du das nicht mit dispatcher erledigen willst, denn das scheint mir der beste Weg dafür.
Eine Formelanpassung mit nativem Code (also ohne dispatcher) ist selbst wenn sie nicht flexibel programmiert sein muss, sondern nur für vorher feststehende Bezugsänderungen, zusätzlicher Programmieraufwand ohne das es irgendeinen Vorteil hätte. Ich jedenfalls sehe Keinen.
Ach und falls hier jemand mitliest und einen Weg kennt für eine Anpassung von Zellbezügen in beliebigen Formeln, mittels nativem Code, ich suche soetwas seit Jahren für meine mottco-Extension und wäre sehr interessiert daran.
Gruß
Stephan
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo wonk,
dein Hauptproblem ist doch gelöst. Also wäre es doch besser gewesen einen neuen Thread aufzumachen, denn: anderes Problem = neuer Thread.
Aber nun gut, wenn Stephan schon geantwortet hat, dann kann ich das auch
Automatische Anpassung der Zellbezüge in Calc per richtigem Programmieren (nativ) ist mir wohl unbekannt, was aber nix zu bedeuten hat, bin ja schließlich nur ne kleine Leuchte. Aber es gäbe da schon einen Trick, den ich nachher noch kurz beschreibe.
Und nein, Stephan, der Trick kann dir leider nicht bei DEINEM Problem behilflich sein.
2.
Ich frage mich ob überhaupt Calc-Formeln kopiert werden müssen, oder ob es vielleicht nicht besser wäre anstatt mit den Calc-Formeln zu arbeiten das gleich per Makro zu erledigen?
So, und nun zu dem Trick. Ist nur ein extrem vereinfachtes Beispiel.
Anstatt mit ausgeschriebenen Calc-Formeln a-la
zu arbeiten, würde ich mit "Namen" arbeiten.
Die gezeigte WENN-Formel wird dem Namen *FormelNummer1* zugeordnet. Dann kann man beispielsweise hiermit
oder
ganz einfach die Zelle kopieren und die Zellbezüge werden intern hinter dem Namen automatisch angepasst.
Zu dem Thema "NamenFürFormeln" gibts hier reichlich lesestoff. Einfach mal danach suchen.
Gruß
balu
dein Hauptproblem ist doch gelöst. Also wäre es doch besser gewesen einen neuen Thread aufzumachen, denn: anderes Problem = neuer Thread.
Aber nun gut, wenn Stephan schon geantwortet hat, dann kann ich das auch
1.Wenn ich das richtig sehe, ist aber nicht möglich, das Kopieren von Formelzellen mit Formelanpassung (z.B. 3 Zellen auf 30 Zellen) OHNE Schleifenkonstruktion zu erreichen!?
Automatische Anpassung der Zellbezüge in Calc per richtigem Programmieren (nativ) ist mir wohl unbekannt, was aber nix zu bedeuten hat, bin ja schließlich nur ne kleine Leuchte. Aber es gäbe da schon einen Trick, den ich nachher noch kurz beschreibe.
Und nein, Stephan, der Trick kann dir leider nicht bei DEINEM Problem behilflich sein.
2.
Ich frage mich ob überhaupt Calc-Formeln kopiert werden müssen, oder ob es vielleicht nicht besser wäre anstatt mit den Calc-Formeln zu arbeiten das gleich per Makro zu erledigen?
So, und nun zu dem Trick. Ist nur ein extrem vereinfachtes Beispiel.
Anstatt mit ausgeschriebenen Calc-Formeln a-la
Code: Alles auswählen
=WENN(B2<>"";"INHALT";"-")
Code: Alles auswählen
=FormelNummer1
Code: Alles auswählen
SXE = oDocGL.Sheets(0).getCellRangeByName("A2")
oDocGL.Sheets(0).getCellRangeByName("D2").Formula = SXE.Formula
Code: Alles auswählen
SXE = oDocGL.Sheets(0).getCellRangeByName("A2")
oDocGL.Sheets(0).getCellRangeByName("D2").FormulaLocal = SXE.FormulaLocal
Zu dem Thema "NamenFürFormeln" gibts hier reichlich lesestoff. Einfach mal danach suchen.
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
wehr rächtschraipfähler findet khan si behalden
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo wonk,
hatte ich gestern vergessen gehabt zu erwähnen, das es auch noch eine andere Methode zum kopieren mit Zellbezugsanpassung gibt, nachzulesen hier.
Gruß
balu
hatte ich gestern vergessen gehabt zu erwähnen, das es auch noch eine andere Methode zum kopieren mit Zellbezugsanpassung gibt, nachzulesen hier.
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
wehr rächtschraipfähler findet khan si behalden
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo,
ich habe Dein Beispiel mal bei mir ausprobiert. Wenn ich das so übertrage, wird bei mir allerdings KEINE Formelanpassung vorgenommen. So wie in Deinem Link beschrieben, hatte ich das bei mir per Schleife gemacht.
Aber noch ein Hinweis: Bei mir werden 3 Formeln in einer Zeile in etwa 3500 Zeilen kopiert. Per Schleife braucht das bei mir gut 30s. Der Dispatcher schaft das in 2s (!) mit einem Makro mit 106 (!) Argumenten, dass ich aber nicht verstehe.
Allerdings weiß ich trotzdem nicht, wie ich bei mir den Dispatcher einsetzen kann, da die Kopieraktion bis in die letzte beschriebene Zeile des Blattes läuft. Die ist aber bei verschiedenen Anwendungen nicht immer in der gleichen Zeile. Bei visueller Erstellung des Makros kann ich das natürlich für EIN Beispiel ausführen. Aber ich weiß nicht wie ich beim Markieren des Übertragungsbereichs ALLGEMEIN bis in die letzte Zeile komme.
Gruss, wonk
ich habe Dein Beispiel mal bei mir ausprobiert. Wenn ich das so übertrage, wird bei mir allerdings KEINE Formelanpassung vorgenommen. So wie in Deinem Link beschrieben, hatte ich das bei mir per Schleife gemacht.
Aber noch ein Hinweis: Bei mir werden 3 Formeln in einer Zeile in etwa 3500 Zeilen kopiert. Per Schleife braucht das bei mir gut 30s. Der Dispatcher schaft das in 2s (!) mit einem Makro mit 106 (!) Argumenten, dass ich aber nicht verstehe.
Allerdings weiß ich trotzdem nicht, wie ich bei mir den Dispatcher einsetzen kann, da die Kopieraktion bis in die letzte beschriebene Zeile des Blattes läuft. Die ist aber bei verschiedenen Anwendungen nicht immer in der gleichen Zeile. Bei visueller Erstellung des Makros kann ich das natürlich für EIN Beispiel ausführen. Aber ich weiß nicht wie ich beim Markieren des Übertragungsbereichs ALLGEMEIN bis in die letzte Zeile komme.
Gruss, wonk
Zuletzt geändert von wonk am Do, 17.08.2017 21:28, insgesamt 1-mal geändert.
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo wonk,
Gruß
balu
Und das sagt mir absolut reineweg-gar-nie-nie-nix! Du musst nicht nur mir, sondern uns allen hier schon genau beschreiben und erklären, was *Formelanpassung* heißen soll. Am besten hängst Du hier eine abgespeckte Beispieldatei an, dann schauen wir mal weiter.KEINE Formelanpassung vorgenommen.
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
wehr rächtschraipfähler findet khan si behalden
Re: Calc Kopieren mit "Inhalte einfügen"
Hallo,
"Formelanpassung" heißt einfach, daß beim Kopieren einer Formelzelle die relativen Zellbezüge angepasst werden. D.h. z.B., wenn in der Zelle A1 steht "=B1" und ich kopiere die Zelle nach A2, dann steht dort "=B2". KEINE Formelanpassung heißt, daß in Zelle A2 dann "=B1" steht.
Gruss, wonk
"Formelanpassung" heißt einfach, daß beim Kopieren einer Formelzelle die relativen Zellbezüge angepasst werden. D.h. z.B., wenn in der Zelle A1 steht "=B1" und ich kopiere die Zelle nach A2, dann steht dort "=B2". KEINE Formelanpassung heißt, daß in Zelle A2 dann "=B1" steht.
Gruss, wonk