CALC-Daten (externer Tabellen) verknüpfen

Hallo,

ich habe die ursprüngliche Problemstellung mal vereinfacht: Eine CALC-Datei mit 3 Tabellen "A", "B" und "C".

[1] Tabelle "A":

A_Artikel_10 | A_ArtNr_10 | A_E-Preis_10 |
A_Artikel_30 | A_ArtNr_30 | A_E-Preis_30 |
A_Artikel_50 | A_ArtNr_50 | A_E-Preis_50 |
A_Artikel_70 | A_ArtNr_70 | A_E-Preis_70 |
A_Artikel_90 | A_ArtNr_90 | A_E-Preis_90 |

[2] Tabelle "B":

ref_A_Artikel_10 | ref_A_ArtNr_10 | ref_A_E-Preis_10 | B_Anzahl_10 |

B_G-Preis_10 |

ref_A_Artikel_50 | ref_A_ArtNr_50 | ref_A_E-Preis_50 | B_Anzahl_50 |

B_G-Preis_50 |

ref_A_Artikel_70 | ref_A_ArtNr_70 | ref_A_E-Preis_70 | B_Anzahl_70 |

B_G-Preis_70 |

[3] Tabelle "C":

ref_A_Artikel_30 | ref_A_ArtNr_30 | ref_A_E-Preis_30 | C_Anzahl_30 |

C_G-Preis_30 |

ref_A_Artikel_90 | ref_A_ArtNr_90 | ref_A_E-Preis_90 | C_Anzahl_90 |

C_G-Preis_90 |

Die Tabellen "B" und "C" beziehen sich mit den Zellinhalten "Artikel", "ArtNr" und "E-Preis" auf die jeweiligen Zellen in Tabelle "A".

Nach Modifikation der Tabelle "A", beispielsweise durch Einfügung von weiteren Zeilen,

A_Artikel_10 | A_ArtNr_10 | A_E-Preis_10 |
A_Artikel_20 | A_ArtNr_20 | A_E-Preis_20 |
A_Artikel_30 | A_ArtNr_30 | A_E-Preis_30 |
A_Artikel_40 | A_ArtNr_40 | A_E-Preis_40 |
A_Artikel_50 | A_ArtNr_50 | A_E-Preis_50 |
A_Artikel_60 | A_ArtNr_60 | A_E-Preis_60 |
A_Artikel_70 | A_ArtNr_70 | A_E-Preis_70 |
A_Artikel_80 | A_ArtNr_80 | A_E-Preis_80 |
A_Artikel_90 | A_ArtNr_90 | A_E-Preis_90 |

sollen die Inhalte "Artikel", "ArtNr" und "E-Preis" in den Tabellen "B" und "C" unverändert bleiben.

Gibt es eine Möglichkeit in den Tabellen "B" und "C" die Zellen in der Tabelle "A" so zu referenzieren, dass bei Modifikation der Tabelle "A" die Zellinhalte in den Tabellen "B" und "C" erhalten bleiben ?

Gruß
Hans-Werner

Hallo Hans-Werner,

Nach Modifikation der Tabelle "A", beispielsweise durch Einfügung von
weiteren Zeilen,

> A_Artikel_10 | A_ArtNr_10 | A_E-Preis_10 |
> A_Artikel_20 | A_ArtNr_20 | A_E-Preis_20 |
> A_Artikel_30 | A_ArtNr_30 | A_E-Preis_30 |
> A_Artikel_40 | A_ArtNr_40 | A_E-Preis_40 |
> A_Artikel_50 | A_ArtNr_50 | A_E-Preis_50 |
> A_Artikel_60 | A_ArtNr_60 | A_E-Preis_60 |
> A_Artikel_70 | A_ArtNr_70 | A_E-Preis_70 |
> A_Artikel_80 | A_ArtNr_80 | A_E-Preis_80 |
> A_Artikel_90 | A_ArtNr_90 | A_E-Preis_90 |

sollen die Inhalte "Artikel", "ArtNr" und "E-Preis" in den Tabellen "B"
und "C" unverändert bleiben.

Wenn ich das richtig verstanden habe:
In Tabelle 1 in A1 steht etwas, und A2 und in A3.
Ich erstelle eine neue Tabelle2 und lasse in Tabelle2 in A1 =$Tabelle1.A1
einfügen und ziehe das nach unten.
Dann füge ich in Tabelle 1 eine neue (leere Zeile) A2 ein.
Bei mir wird in Tabelle2 der ursprüngliche Inhalt weiter angezeigt. Die
Referenzierung hat sich also mit der eingefügten Zeile so verschoben,
dass die Daten weiter so dort stehen wie vorher auch.

Getestet mit LO 5.4.2.2 unter OpenSUSE 42.2 64bit rpm Linux.

Gruß

Robert

Hallo Hans-Werner,

ich gebe Robert recht, dass du dich lieber ein bisschen mit Base beschäftigen solltest. Du musst ja z.B. in Calc, wenn du neue Einträge in Tab. B oder C machst, jeweils für jeden den Bezug wieder herstellen und darfst dich dabei nicht verklicken. In deinem Beispiel unten müsstest du gleich für drei Felder den Bezug herstellen. In Base hättest du die Tabellen über Schlüsselspalten verknüpft (in deinem Fall wohl die Artikelnummer), Preis und Artikelbezeichnung wären dann automatisch passend, und du stellst den Bezug nicht über das fehlerträchtige Referenzieren von Zellen her, sondern durch Auswahl der Artikelnummer (bei Verwendung einer geschickten Listbox auch mitsamt Bezeichnung und Preis möglich). Die erste Beschäftigung mit Base erfordert etwas Anlaufaufwand, aber das macht sich bald bezahlt; und Base macht Spaß!
Wenn du gar nichts von Base weißt, bietet das zugehörige Kapitel des Handbuchs "Erste Schritte" eine Einführung. Das habe ich für die Version 5.2 praktisch fertig und kann es dir gerne vorab schicken. Wenn du schon ein bisschen was weißt oder sonst einen geeigneten Hintergrund hast, kannst du auch gleich das Base-Handbuch von Robert herunterladen, eine wahre Fundgrube für das Thema!

Aber zu Calc will ich dir auch eine Antwort bieten:
Ich habe die Aufgabenstellung erst einmal auf das absolute Minimum reduziert: Tab. 1 mit den Zeilen
A1: "ursprünglich Zelle A1"
A2: "ursprünglich Zelle A2"
Tab. 2 mit de einzigen Eintrag:
A1: "=Tabelle1.A2" (siehst du im Eingabefeld oberhalb der Tabelle, die Anzeige ist natürlich: "ursprünglich Zelle A2")
Die Tabellen haben auch wirklich die Namen "Tabelle1" und "Tabelle2", wie sie standardmäßig vergeben werden, diese Namen müssen ja beim Bezug verwendet werden.

Wenn ich nun in Tabelle 1 vor der Zeile 2 eine neue Zeile einfüge und dann auf Tabelle 2 schaue, steht in der einzigen gefüllten Zelle immer noch "ursprünglich Zelle A2". Und wenn du auf das Eingabefeld schaust, steht dort "Tabelle1.A3". Der Bezug ist angepasst worden!
Ich denke, das ist das, was du willst, und du kannst das sicher leicht auf deine Aufgabe übertragen.

Dein Problem lässt sich also sicher in  Calc lösen (auch der Bezug zu anderen Tabellen muss gehen, obwohl ich es noch nicht selbst gemacht habe, da steht was in der Hilfe; aber da ist immer das Problem, wenn eine der Tabellen verschoben wird!), aber ich sehe Calc eher als gut geeignet, wenn die Dateninhalte häufig geändert werden, die Strukturen aber eher selten.
Ich habe in der Arbeit mal so etwas mit Excel gemacht: die Daten wurden mit einem anderen Programm extrahiert und aufbereitet und dann in Excel geladen, wo eine ganz primitive Form eines Data Warehouse realisiert war, so dass man die Daten - die monatlich erneuert wurden - aus verschiedenen Richtungen verdichtet anschauen konnte. Da waren lauter Bezüge drin - ich glaube, noch ein oder zwei andere Funktionen außer dem Bezug - , aber die Struktur blieb im Wesentlichen gleich Wenn dann mal eine - je nachdem, wie man es darstellt - Spalte oder Zeile dazukam, erforderte es Konzentration, dass man alle notwendigen Bezüge u.ä. anpasst oder für die neuen Daten herstellt.
Da wäre eine Datenbank dann besser zu handhaben gewesen. Aber die Excel-Datei konnte man einfach verschicken; eine solche Lösung kann also in manchen Fällen auch die b este sein.
Und das Data Warehouse war zwar im Aufbau, aber so ein Brummer dauert seine Zeit, meine Anwendung war jedenfalls drei Jahre nach meinem Ausscheiden wegen Altersteilzeit immer noch aktiv!

Dieses Beispiel sollte noch einmal ein bisschen meine Abgrenzung zwischen Calc und Base verdeutlichen - ich weiß nicht, ob jeder das genauso sieht - , dass Calc ein gutes Werkzeug ist, wenn sich vor allem die Dateninhalte öfters ändern (oder man das sowieso  nur einmalig braucht), denn da kommt man dann schnell zum Ziel. Wenn dagegen häufige Änderungen am Datenumfang oder der Struktur erfolgen werden, ist man bei Base besser dran, denn dann verliert man bei Calc leichter den Überblick. Bei größeren Datenmengen wird der Vorteil von Base sowieso immer höher. Und auch die Sicherheit spricht dann für Base: wie schnell ist ein Bezug verhunzt; bei Base (bei Datenbankanwendungen allgemein) sind die Beziehungen von den Daten getrennt.

Also, vielleicht machst du, nachdem du dein Problem in Calc gelöst hast, mal einen Versuch mit Base.

Gruß

Gerhard

Hallo Robert und Gerhard,

danke für eure Tipps und Hinweise, durch welche ich einen selbst gemachten Fehler jetzt entdeckt habe:

Ich schrieb als Referenz fälschlicherweise "=Tabelle1.$A$1" und nicht richtigerweise "=$Tabelle1.A1". Jetzt bleibt der Bezug erhalten, wenn ich in der referenzierten Tabelle irgendwo eine Zeile einfüge.

Aber das hilft mir nicht wirklich weiter, denn wenn man die referenzierte Tabelle neu sortiert, z.B. absteigend, dann gehen die Referenzen leider wieder verloren. Aber dies scheint ein grundsätzliches - und ungelöstes - Problem von Tabellenkalkulationsprogrammen zu sein. Im CALC-Handbuch heißt es dazu auf Seite 444:

"[...] Wenn eine Zelle während eines Sortiervorgangs verschoben wird, werden externe Referenzen mit der Zelle nicht aktualisiert. [...] Ebenso haben wir kein Tabellenkalkulationsprogramm gefunden, das, während der Sortierung, ein anderes Verhalten für Referenzen darlegt. [...]"

Tja, da habe ich wohl erst mal Pech gehabt, aber ich habe mir schon einen Workaround überlegt:

Ich führe in der Bauteile-Tabelle eine Spalte ein, die einfach nur die Zeilennummer der jeweiligen Zeile enthält. Auf die so sortierte Bauteile-Tabelle mache ich dann die Referenzen der Bauteile-Tabellen der einzelnen Schaltungen. Wenn in die Bauteile-Tabelle doch mal noch ein neues Bauteil hinzukommt, wird es einfach unten an die Tabelle angefügt.

Auf diese Weise kann ich die Tabelle so sortieren, wie ich es eben gerade benötige:

Sollen die Referenzen stimmen, wird nach der "Zeilen"-Spalte sortiert. Will ich die Bauteile sortiert haben (Widerstände, Transistoren, ICs et cetera), weil ich ein bestimmtes Bauteil suche, wird mal kurz nach den anderen Spalten-Überschriften sortiert - und anschließend wieder nach den Zeilennummern, wodurch die Referenzen wieder stimmen. Ich weiß schon, "elegant geht anders", aber manchmal ist "quick & dirty" auch angemessen, wenn man einfach nicht mehr Funktionalität benötigt.

Zu der Problemlösung mit BASE:

Meine Bauteileliste umfasst gerade mal 270 Zeilen und da kommt kaum noch etwas hinzu und geändert wird auch kaum noch was, da die meisten Schaltungen gemacht sind und kaum noch neue hinzu kommen. Da ist mir zurzeit der Aufwand mit BASE einfach zu groß, da das Ganze doch eher mehr eine statische Datensammlung ist. Und ich habe zurzeit auch keine anderen "Vorhaben", mit denen ich mich auf BASE abstützen wollte/sollte/müsste ...

Grüße
Hans-Werner

------ Originalnachricht ------