Bezug auf andere Calc-Tabelle per Namensvergabe

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Bezug auf andere Calc-Tabelle per Namensvergabe

von Stephan » Mo, 05.02.2007 20:20

Das sollte nicht schwer sein, der der Pfad in der DDE-Funktion ein String ist für den Du auch eine Zelladresse angeben kannst und unter dieser Zelladresse dann den notwendigen Ausdruck zusammenbaust.
Ausgangspunkt ist die Funktion Zelle() die Dir mittels Zelle("Filename") alles Notwendige liefert, Du mußt nur das für Dich Notwendige, also den Pfad abtrennen.
Ich habe jetzt keine Lust das zu entwickeln, aber hier ist ein Beispiel was nicht den Pfad, sondern den Dateinamen separiert:

Code: Alles auswählen

=TEIL(ZELLE("FILENAME");FINDEN("#";WECHSELN
(ZELLE("FILENAME");"/";"#";LÄNGE(ZELLE
("FILENAME"))-LÄNGE(WECHSELN(ZELLE
("FILENAME");"/";"")));1)+1;FINDEN("#";ZELLE
("FILENAME");1)-FINDEN("#";WECHSELN
(ZELLE("FILENAME");"/";"#";LÄNGE(ZELLE
("FILENAME"))-LÄNGE(WECHSELN(ZELLE
("FILENAME");"/";"")));1)-2)
Ich kann hier leider nicht die detaillierte Vorgehensweise reinkopieren, sonst verärgert das meinen Verlag, denn die komplette Erklärung steht im unten verlinkten Buch. Allerdings ist es wirklich nicht so kompliziert wenn Du beachtest das die Rückgabe von:

Code: Alles auswählen

Zelle("Filename") 
immer gleich aufgebaut ist, beispielsweise:

Code: Alles auswählen

'file:///D:/Beispiele/Fehlerbeispiel.ods'#$Tabelle3
und Du damit genau weist das der für Dich interessante Teil links des am weitesten rechts stehenden "/" steht, entwickle das schrittweise, also in Kürze:
*ermittle die Anzahl aller "/" (indem Du alle "/" durch "" ersetzt und die Längendifferenz des ursprünglichen und des neues Ausdruck ermittelst
*ersetze nun das "/" ganz rechts (Du kennst ja dessen Nummer --> die Anzahl aller "/") durch ein markanntes Zeichen
*ermittle die Position dieses markannten Zeichen und schneide alles rechts davon weg plus eines mehr (das markannte Zeichen)
*schneide links "'file:///" weg und was übrig bleibt ist der Pfad

falls die 20 Einzeldateien, nun nicht in einem Verzeichnis liegen, sind trotzdem die relativen Pfadbeziehungen fix, so das Du sie berücksichtigen kannst.



Gruß
Stephan

von V7Sport » Mo, 05.02.2007 17:21

Hallo Stephan,

zunächst ein großer Dank an Dich, dass Du so ausführlich das Problem bearbeitet hast.

1.) Du hast recht: DDE geht viel besser. Einfach Verknüpfung einfügen, den Bereichsnamen noch vergeben und fertig!
2.) leider kommt dann das nächste Problem:
Unsere Anwendung ist eine Zusammensetzung aus einzelnen Spreadsheets zur Energieoptimierung von Gebäuden. Die eine Tabelle umfasst die Klimadaten, die andere die Verbräuche und Tarife und viele andere die ganzen elektrischen und thermischen Verbraucher, die mit den Klimadaten und Tarifen bewertet werden. Es gibt also relativ viele Querbeziehungen.
Die Anwendung umfasst i.d.R. 20 Einzeldateien.
Bei einem Projektstart werden die 20 Dateien mit den entsprechenden Verzeichnissen vom Anwendungsserver in das jeweilige Projektverzeichnis kopiert, so dass der Techniker mit seiner Erfassung beginnen kann.
Unter Excel werden beim Kopieren in die Projektverzeichnisse automatisch die Verknüpfungen zwischen den Dateien aktualisiert (Beispiel: automatische Korrektur von "c:\Anwendungsserver\klimadaten.xls" auf "s:\Stadt Büllerbü\klimadaten.xls".)
Diese automatische Aktualisierung macht eine DDE-Verknüpfung - nachdem ich es gerade getestet habe - leider nicht.

Es ist mir innerlich sehr wichtig, dass ich diese Anwendung auf OpenOffice portiere. Ich errege relativ viel Aufsehen, weil ich alle meine Präsentationen, Kalkulationen etc. mit OO mache. Bei jeder Präsentation (selbst auf Messen) und Handouts kommt immer auf der letzten Seite der Hinweis, dass das ganze mit OpenOffice 2.0 erstellt wurde.

Offensichtlich wird es noch ein steiniger Weg...

mfg

V7Sport

von Stephan » Mo, 05.02.2007 15:11

Gibt es eine Lösung?
Ich fürchte i.d.S. wie Du möchtest nein.

Falls Du file-Verknüpfungen verwendest scheint mir das das gewünschte Verhalten für file-Verknüpfungen garnicht funktionieren kann, wenn man deren Funktion in Calc betrachtet.

Beispiel:
In Datei A sei für Tabelle1 Zelle A1 der Bereichsname "mwst" vergeben. Wenn Du in Datei B in Zelle B1 "=" eingibst und dann in die Zelle A1 der anderen Datei klickst, erzeugt Calc automatisch beispielsweise einen solchen Ausdruck:

='file:///C:/Dokumente und Einstellungen/Eigene Dateien/test.xls'#$Tabelle1.A1

Das ist aber nun nicht eine direkte Verknüpfung zur Datei:

C:/Dokumente und Einstellungen/Eigene Dateien/test.xls

Der Gesamtausdruck:

='file:///C:/Dokumente und Einstellungen/Eigene Dateien/test.xls'#$Tabelle1.A1

setzt sich zusammen aus dem Namen eines ausgeblendeten und dateiübergreifend verknüpften Tabellenblattes und einem dateiinternen Zellbezug auf eine Zelle des verknüpften Blattes.

Eine Übernahme von Bereichsnamen der Ursprungsdatei (Datei A) in das verknüpfte Tabellenblatt in Datei B ist somit, meines Erachtens, nicht sinnvoll möglich, weil sie mit schon bestehenden Bereichnamen in Datei B kollidieren könnten, und findet deshalb wohl garnicht erst statt.

Dieses andere Verhalten von OO macht die Anwendung extrem schlechter wartbar.
Dann solltest Du weiterhin MS Excel benutzen.

Ich sehe für eine file-Verknüpfung nicht das es in Calc gehen könnte und bei einer DDE-Verknüpfung geht es wohl nicht automatisch das eine Adressangabe gegen den vorhandenen Bereichsnamen getauscht wird. Eine Lösung mit benutzerdefinierter Funktion scheidet praktisch auch aus, da diese nicht (oder nur sehr 'unergonomisch') in der Lage wäre Formeln zu verändern, so das allenfalls eine Makrolösung ginge.
Letztere dürfte aber (wenn sie universell sein soll - denn Du willst ja wohl kaum an anderen Stellen diverse 'Verrenkungen' machen müssen) ziemlich langsam sein.


allerdings ...

... verstehe ich insgesamt noch nicht so recht was Dir Deine Vorgehensweise (Du trägst Zelladressen ein und willst das die automatisch in Bereichsnamen umgewandelt werden) für Vorteile bringt, logischer erschiene mir doch gleich die Bereichsnamen zu verwenden was eigentlich in einer DDE-Verknüpfung funktionieren sollte. Oder was übersehe ich?



Gruß
Stephan

Bezug auf andere Calc-Tabelle per Namensvergabe

von V7Sport » Mo, 05.02.2007 00:48

Liebe Gemeinde,

ich portiere gerade eine Excel-Anwendung und stoße auf ein Problem.
In Excel vergebe ich z.B. einen Namen "Mehrwertsteuer" in Tabelle1. In Tabelle2 möchte ich darauf verweisen. Dies mache ich, indem ich einfach einen Bezug auf Tabelle1 mache. Beim nächsten Öffnen der Excel-Datei steht dann statt "..tabelle1$C$4" dann automatisch der in(!) Tabelle1 vergebene Name "Mehrwertsteuer". Hat die Tabelle1 eine 1:n Beziehung zu anderen Tabelle, hat dieses Vorgehen unter Excel den Vorteil, dass ich den Namen nur 1-mal vergeben muß.
Unter OO zeigt sich ein anderes Bild:
hier kann ich zwar auch in der Tabelle1 einen Namen vergeben. Dieser wird aber in der Tabelle2 nicht verwendet. Erst wenn ich in Tabelle2 über Namensvergabe auf die Tabelle1 verweise, erscheint auch der Name in der Formel und ist dadurch auch besser lesbar.

Was ist also das Problem?
Bei diesem Verhalten von OO muß ich leider in jeder Datei, die das Datenelement aus Tabelle1 benötigt, mühevoll einen Verweis machen. Ich habe also den Namen mehrfach(!) zu vergeben. In Excel muß ich es nur in der Quelldatei einmal(!) machen.

Dieses andere Verhalten von OO macht die Anwendung extrem schlechter wartbar.
Gibt es eine Lösung?

mfg
V7Sport

Nach oben