Bezüge in Calc-Tabellen ändern sich unbeabsichtigt

Hallo,

ich habe ein Problem mit einer Calc-Tabelle und bin mir nicht sicher, ob ich zu doof bin oder das ein Bug ist.

Die Datei hat zwei Tabellen, eine "Daten"-Tabelle mit Personendaten, u.a. Name und Geburtsdatum. Die zweite soll diverse Daten auswerten, u.a. aus dem Geburtsdatum das Alter berechnen, und zwar immer zeilenweise entsprechend, d.h. in Zeile 2 der Auswertungstabelle steht das Alter der Person in Zeile 2 der Datentabelle.

In der Auswertungs-Tabelle habe ich folgende Formel: =JAHRE(Daten.B2;HEUTE();1). Diese wird nach unten ausgefüllt, also:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
... usw...

Wenn ich jetzt in der Daten-Tabelle z.B. Zeile 3 lösche, ändern sich die Bezüge in der Auswertungs-Tabelle so:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
...

Mache ich die Löschung rückgängig, ändern sich die Bezüge erneut:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
=JAHRE(Daten.B6;HEUTE();1)
...

Das ist absolut nicht mein Ansinnen, die Bezüge in der Auswertung sollen einfach so bleiben. V.a. warum sich das Ganze nochmals ändert, wenn man die Löschung ändert - das sieht mir mehr nach einem Bug aus, denn real stellt "Rückgängig" hier nicht den vorherigen Zustand her.

Wenn ich absolute Bezüge nehme, also "Daten.$B$2" usw., tritt das Verhalten ähnlich auf. Lösche ich dann Zeile 3 der Daten, steht in der Auswertung dann ein Fehler in der entsprechenden Zeile und in der Formel "Daten.$B$#REF!". Die folgenden Zeilen rutschen dann wieder quasi nach oben, d.h. in Zeile 4 steht "Daten.$B$3" usw. Immerhin funktioniert hier "Rückgängig" wie es soll.

Ich habe das ausprobiert mit LO 5.0.5 unter Ubuntu mit den dortigen Paketen und auf einem älteren Rechner mit LO 4.3 ebenfalls unter Ubuntu. Ich habe mal eine Testdatei angehängt, wenn jemand das mal unter einem anderen System ausprobieren könnte - nicht dass es ein Ubuntu-spezifischer Bug ist.

Vielen Dank,

Andreas Heinlein

Hallo,

ich habe ein Problem mit einer Calc-Tabelle und bin mir nicht sicher, ob
ich zu doof bin oder das ein Bug ist.

Die Datei hat zwei Tabellen, eine "Daten"-Tabelle mit Personendaten,
u.a. Name und Geburtsdatum. Die zweite soll diverse Daten auswerten,
u.a. aus dem Geburtsdatum das Alter berechnen, und zwar immer
zeilenweise entsprechend, d.h. in Zeile 2 der Auswertungstabelle steht
das Alter der Person in Zeile 2 der Datentabelle.

In der Auswertungs-Tabelle habe ich folgende Formel:
=JAHRE(Daten.B2;HEUTE();1). Diese wird nach unten ausgefüllt, also:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
... usw...

Wenn ich jetzt in der Daten-Tabelle z.B. Zeile 3 lösche, ändern sich die
Bezüge in der Auswertungs-Tabelle so:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
...

Mache ich die Löschung rückgängig, ändern sich die Bezüge erneut:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
=JAHRE(Daten.B6;HEUTE();1)
...

Das ist absolut nicht mein Ansinnen, die Bezüge in der Auswertung

sollen

einfach so bleiben. V.a. warum sich das Ganze nochmals ändert, wenn

man

die Löschung ändert - das sieht mir mehr nach einem Bug aus, denn real
stellt "Rückgängig" hier nicht den vorherigen Zustand her.

Wenn ich absolute Bezüge nehme, also "Daten.$B$2" usw., tritt das
Verhalten ähnlich auf. Lösche ich dann Zeile 3 der Daten, steht in der
Auswertung dann ein Fehler in der entsprechenden Zeile und in der

Formel

"Daten.$B$#REF!". Die folgenden Zeilen rutschen dann wieder quasi

nach

oben, d.h. in Zeile 4 steht "Daten.$B$3" usw. Immerhin funktioniert hier
"Rückgängig" wie es soll.

Ich habe das ausprobiert mit LO 5.0.5 unter Ubuntu mit den dortigen
Paketen und auf einem älteren Rechner mit LO 4.3 ebenfalls unter

Ubuntu.

Ich habe mal eine Testdatei angehängt, wenn jemand das mal unter

einem

anderen System ausprobieren könnte - nicht dass es ein
Ubuntu-spezifischer Bug ist.

Vielen Dank,

Andreas Heinlein

moin, moin

kann ich bestätigen
nach Löschung
  =JAHRE(Tabelle1.B4;HEUTE();2)
  =JAHRE(Tabelle1.B5;HEUTE();2)
  =JAHRE(Tabelle1.B5;HEUTE();2)
  =JAHRE(Tabelle1.B6;HEUTE();2)

nach rückgängig
  =JAHRE(Tabelle1.B4;HEUTE();2)
  =JAHRE(Tabelle1.B6;HEUTE();2)
  =JAHRE(Tabelle1.B6;HEUTE();2)
  =JAHRE(Tabelle1.B7;HEUTE();2)

auch bei "halb-"absoluten Bezügen

  =JAHRE(Tabelle1.$B4;HEUTE();2)
  =JAHRE(Tabelle1.$B5;HEUTE();2)
  =JAHRE(Tabelle1.$B5;HEUTE();2)
  =JAHRE(Tabelle1.$B6;HEUTE();2)

und wieder rückgängig

  =JAHRE(Tabelle1.$B4;HEUTE();2)
  =JAHRE(Tabelle1.$B5;HEUTE();2)
  =JAHRE(Tabelle1.$B5;HEUTE();2)
  =JAHRE(Tabelle1.$B6;HEUTE();2)

da hilft nur Spalte A in Tab2 neu "ziehen"

Frank

p.s.
Version: 5.1.0.3
Build-ID: 5e3e00a007d9b3b6efb6797a8b8e57b51ab1f737
Linux 3.16;

Dass sich die Bezüge ändern müssen, wenn die Ausganswerte nicht mehr vorhanden sind, ist normal. Du erhältst eine stabile Tabelle, wenn Du die Bezüge z.B. durch 'VERSCHIEBUNG()' und einen Bezug zu einer Zelle, die keiner Veränderung unterliegt (Überschift in der Datentabelle oder ähnlich) in Deine Ergebnistabelle einarbeitest.
Bernd

Hallo Andreas,
hier die "vergessenen" Formelvorschläge:
=VERSCHIEBUNG(Daten.$A$1;EILE()-1;SPALTE()-1;1;1)
für die Textdaten und
=JAHRE(VERSCHIEBUNG(Daten.$A$1;ZEILE()-1;1;1;1);HEUTE();0)
für das Alter. Wobei Du auf die absolute Adressierung des Bezuges 'Daten.$A$1'achten musst und die Spaltenverschiebung anpasst, bevor Du herunterkopierst. Jetzt kannst Du in "Daten" zeilenweise löschen oder einfügen ohne Veränderung der Anzeigetabelle.
Bernd

ich habe ein Problem mit einer Calc-Tabelle und bin mir nicht sicher, ob
ich zu doof bin oder das ein Bug ist.

Die Datei hat zwei Tabellen, eine "Daten"-Tabelle mit Personendaten,
u.a. Name und Geburtsdatum. Die zweite soll diverse Daten auswerten,
u.a. aus dem Geburtsdatum das Alter berechnen, und zwar immer
zeilenweise entsprechend, d.h. in Zeile 2 der Auswertungstabelle steht
das Alter der Person in Zeile 2 der Datentabelle.

In der Auswertungs-Tabelle habe ich folgende Formel:
=JAHRE(Daten.B2;HEUTE();1). Diese wird nach unten ausgefüllt, also:
=JAHRE(Daten.B2;HEUTE();1)

*Nochmal* B2?

=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
... usw...

Wenn ich jetzt in der Daten-Tabelle z.B. Zeile 3 lösche, ändern sich die
Bezüge in der Auswertungs-Tabelle so:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)

Das ist auch verständlich und korrekt; durch Löschen der Zeile 3 in der
Quelltabelle verschieben sich natürlich alle darauf folgenden Zeilen,
sprich die ehemals *vierte* Zeile wird zur jetzt *dritten* Zeile. Die
Verweise werden entsprechend angepasst.

Mache ich die Löschung rückgängig, ändern sich die Bezüge erneut:

Logisch; alle nachfolgenden Zeilen verschieben sich erneut, mit
entsprechender Anpassung der Nummerierung.

Das ist absolut nicht mein Ansinnen, die Bezüge in der Auswertung sollen
einfach so bleiben.

*Wie* bleiben, sprich was genau willst Du worauf verwiesen haben?

*Momentan* bleiben die relativen Verweise 'as is' erhalten, d. h. wenn
in der verweisenden Tabelle /vorher/ auf die Zeile "Nudeln" der
Quelltabelle verwiesen wird, dann wird auch /nachher/ auf die Zeile
"Nudeln" verwiesen sein, und nicht etwa auf die Zeile "Sauce".

Wenn ich Dich richtig interpretiere, willst Du aber, dass nicht der
*Verweis* sondern der *Index* erhalten bleibt, sprich die Zelle dann auf
die Zeile "Sauce" verweisen soll. Dann kannst Du nicht mit direkten
Verweisen arbeiten, sondern musst entweder über INDEX gehen:

=JAHRE(INDEX(Daten.$B$2:$B$100;ZEILE()-1;1);HEUTE();1)

oder über VERSCHIEBUNG:

=JAHRE(VERSCHIEBUNG(Daten.$B$2;ZEILE()-ZEILE(Auswertung.$B$2);0);HEUTE();1)

oder über die explizite Berechnung der Adresse (aber das ist, naja ...):

=JAHRE(INDIREKT(ADRESSE(ZEILE(); SPALTE($B$2);4));HEUTE();1;1;"Daten")

oder aber (wohl am besten) über VERWEIS bzw SVERWEIS:

=JAHRE(SVERWEIS(Auswertung.A2;Daten.$A$2:$B$7;2;0);HEUTE();1)

Wichtig ist dabei, dass die Angaben der Quellbereiche usw. wirklich als
*absolute* Adressen angegeben werden, damit diese beim Kopieren von
Zelle zu Zelle eben genau *nicht* mit angepasst werden.

Im Zweifelsfall schaust Du Dir erst mal in einer oder mehreren
Hilfsspalten an, welche Adresse überhaupt gebildet wird
("=ADRESSE(ZEILE(); SPALTE($B$2);4)"), auf welchen Zellinhalt dadurch
verwiesen wird, usw.

BTW ist die gleiche Vorgehensweise ganz allgemein erforderlich, wenn auf
Daten *außerhalb* des eigenen Datensatzes

Wolfgang

Danke für eure Hilfe.

ich habe ein Problem mit einer Calc-Tabelle und bin mir nicht sicher, ob
ich zu doof bin oder das ein Bug ist.

Die Datei hat zwei Tabellen, eine "Daten"-Tabelle mit Personendaten,
u.a. Name und Geburtsdatum. Die zweite soll diverse Daten auswerten,
u.a. aus dem Geburtsdatum das Alter berechnen, und zwar immer
zeilenweise entsprechend, d.h. in Zeile 2 der Auswertungstabelle steht
das Alter der Person in Zeile 2 der Datentabelle.

In der Auswertungs-Tabelle habe ich folgende Formel:
=JAHRE(Daten.B2;HEUTE();1). Diese wird nach unten ausgefüllt, also:
=JAHRE(Daten.B2;HEUTE();1)

*Nochmal* B2?

Nein, das war etwas missverständlich geschrieben.

=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)
... usw...

Wenn ich jetzt in der Daten-Tabelle z.B. Zeile 3 lösche, ändern sich die
Bezüge in der Auswertungs-Tabelle so:
=JAHRE(Daten.B2;HEUTE();1)
=JAHRE(Daten.B3;HEUTE();1)
=JAHRE(Daten.B4;HEUTE();1)
=JAHRE(Daten.B5;HEUTE();1)

Das ist auch verständlich und korrekt; durch Löschen der Zeile 3 in der
Quelltabelle verschieben sich natürlich alle darauf folgenden Zeilen,
sprich die ehemals *vierte* Zeile wird zur jetzt *dritten* Zeile. Die
Verweise werden entsprechend angepasst.

Das verstehe ich mittlerweile schon, ich hatte halt ursprünglich anders gedacht (und der Nutzer, der das Problem eigentlich hat, ebenfalls).

Mache ich die Löschung rückgängig, ändern sich die Bezüge erneut:

Logisch; alle nachfolgenden Zeilen verschieben sich erneut, mit
entsprechender Anpassung der Nummerierung.

Das leuchtet mir immer noch nicht ein; grundsätzlich sollte "Rückgängig" doch immer den Zustand wie vorher herstellen?

Das ist absolut nicht mein Ansinnen, die Bezüge in der Auswertung sollen
einfach so bleiben.

*Wie* bleiben, sprich was genau willst Du worauf verwiesen haben?

*Momentan* bleiben die relativen Verweise 'as is' erhalten, d. h. wenn
in der verweisenden Tabelle /vorher/ auf die Zeile "Nudeln" der
Quelltabelle verwiesen wird, dann wird auch /nachher/ auf die Zeile
"Nudeln" verwiesen sein, und nicht etwa auf die Zeile "Sauce".

Wenn ich Dich richtig interpretiere, willst Du aber, dass nicht der
*Verweis* sondern der *Index* erhalten bleibt, sprich die Zelle dann auf
die Zeile "Sauce" verweisen soll.

Richtig.

Dann kannst Du nicht mit direkten
Verweisen arbeiten, sondern musst entweder über INDEX gehen:

> =JAHRE(INDEX(Daten.$B$2:$B$100;ZEILE()-1;1);HEUTE();1)

oder über VERSCHIEBUNG:

>
=JAHRE(VERSCHIEBUNG(Daten.$B$2;ZEILE()-ZEILE(Auswertung.$B$2);0);HEUTE();1)

oder über die explizite Berechnung der Adresse (aber das ist, naja ...):

> =JAHRE(INDIREKT(ADRESSE(ZEILE(); SPALTE($B$2);4));HEUTE();1;1;"Daten")

oder aber (wohl am besten) über VERWEIS bzw SVERWEIS:

> =JAHRE(SVERWEIS(Auswertung.A2;Daten.$A$2:$B$7;2;0);HEUTE();1)

Wichtig ist dabei, dass die Angaben der Quellbereiche usw. wirklich als
*absolute* Adressen angegeben werden, damit diese beim Kopieren von
Zelle zu Zelle eben genau *nicht* mit angepasst werden.

Im Zweifelsfall schaust Du Dir erst mal in einer oder mehreren
Hilfsspalten an, welche Adresse überhaupt gebildet wird
("=ADRESSE(ZEILE(); SPALTE($B$2);4)"), auf welchen Zellinhalt dadurch
verwiesen wird, usw.

BTW ist die gleiche Vorgehensweise ganz allgemein erforderlich, wenn auf
Daten *außerhalb* des eigenen Datensatzes

Wolfgang

Das probiere ich mal aus. Vielen Dank.

>> Wenn ich jetzt in der Daten-Tabelle z.B. Zeile 3 lösche, ändern sich

die

>> Bezüge in der Auswertungs-Tabelle so:
>> =JAHRE(Daten.B2;HEUTE();1)
>> =JAHRE(Daten.B3;HEUTE();1)
>> =JAHRE(Daten.B3;HEUTE();1)
>> =JAHRE(Daten.B4;HEUTE();1)
>> =JAHRE(Daten.B5;HEUTE();1)

Hallo,

... und trotzdem, das ist eine böse Falle

sicher kann man das mit Sverweis auch gut lösen,
aber das ist eine böse Falle,
den die Formeln sieht man ja nicht
und man verlässt sich darauf, das ja alles okay ist/war.

Frank

Stimmt; wenn wirklich die Funktion "Rückgängig" ausgeführt wurde, müsste
der alte Zustand eigentlich wiederhergestellt worden sein.

Die von Dir geposteten Formeln deuten aber für mich eher darauf hin,
dass stattdessen nur eine Zeile an gleicher Stelle eingefügt wurde (von
einem weniger Versierten mag das durchaus als "rückgänig machen"
verstanden werden).

Wolfgang

Nein, ich habe definitiv Strg+Z ausgeführt... :wink:

Gruß,
Andreas

moin, moin,

ich muss Andreas Recht geben:

vorher
=JAHRE(Tabelle1.A5;HEUTE();1)
=JAHRE(Tabelle1.A6;HEUTE();1)
=JAHRE(Tabelle1.A7;HEUTE();1)

nach Löschung
=JAHRE(Tabelle1.A5;HEUTE();1)
=JAHRE(Tabelle1.A6;HEUTE();1)
=JAHRE(Tabelle1.A6;HEUTE();1)

nach CTRL-Z
=JAHRE(Tabelle1.A5;HEUTE();1)
=JAHRE(Tabelle1.A7;HEUTE();1)
=JAHRE(Tabelle1.A7;HEUTE();1)

und das ist eine böse Falle.

Bei CTRL-Z erwarte ich eigentlich, dass der vorhergehende Zusatnd wieder
hergestellt wird

Frank

Hallo ...

Nein, ich habe definitiv Strg+Z ausgeführt... :wink:

Gruß,
Andreas

moin, moin,

ich muss Andreas Recht geben:

vorher
=JAHRE(Tabelle1.A5;HEUTE();1)
=JAHRE(Tabelle1.A6;HEUTE();1)
=JAHRE(Tabelle1.A7;HEUTE();1)

nach Löschung
=JAHRE(Tabelle1.A5;HEUTE();1)
=JAHRE(Tabelle1.A6;HEUTE();1)
=JAHRE(Tabelle1.A6;HEUTE();1)

nach CTRL-Z
=JAHRE(Tabelle1.A5;HEUTE();1)
=JAHRE(Tabelle1.A7;HEUTE();1)
=JAHRE(Tabelle1.A7;HEUTE();1)

und das ist eine böse Falle.

Bei CTRL-Z erwarte ich eigentlich, dass der vorhergehende Zusatnd wieder
hergestellt wird

ich bin in dem Thema nicht drin, aber es gibt einige Fehlermeldungen zur
Funktion Rückgängig (Undo) in Calc in Bugzilla. Vielleicht ist das
beschriebene Problem bereits gemeldet worden. Hier sind die Meldungen,
die ich gefunden habe:

Calc [EDITING, FORMATTING] find & replace causes default formatting to
be applied to cells, undo working incorrectly
https://bugs.documentfoundation.org/show_bug.cgi?id=38982

"undo" mess up previous Conditional Format-ranges
https://bugs.documentfoundation.org/show_bug.cgi?id=89686

Undo can lead to wrong results from formulas
https://bugs.documentfoundation.org/show_bug.cgi?id=91598

Editing : Formula not updating on undo.
https://bugs.documentfoundation.org/show_bug.cgi?id=92650

Removal of conditional formatting not registered as an undo
https://bugs.documentfoundation.org/show_bug.cgi?id=95617

Undo after Cut/Paste does not restore original cell contents
https://bugs.documentfoundation.org/show_bug.cgi?id=80188

Falls Dein/Euer Undo-Problem in obigen Bug Reports noch nicht
beschrieben ist, wäre es sicherlich gut, wenn einer von Euch einen
eigenen Bug Report erstellt. Hier steht's wie's geht:

https://wiki.documentfoundation.org/QA/BugReport/de

Grüße
Harald

Hallo, Harald,

vermutungsweise ist das dieser:

Undo after Cut/Paste does not restore original cell contents
https://bugs.documentfoundation.org/show_bug.cgi?id=80188

Frank

p.s.
aktuelle Version:
Version: 5.1.0.3
Build-ID: 5e3e00a007d9b3b6efb6797a8b8e57b51ab1f737
unter suse linux, 13.2, 32-bittig
d.o.