Verknüpfungen zu verschiedenen Dateien
Moderator: Moderatoren
Verknüpfungen zu verschiedenen Dateien
Moin Moin liebe Sportsfreunde.
Mich plagt da folgendes Problem. Ich habe den Auftrag bekommen für jeden Mitarbeiter eine Urlaubskarte anzulegen. Jeder Mitarbeiter hat eine eigene Datei, in der drei Tabellen vorhanden sind. Urlaub, Überstunden und Fortbildungen.
Nun möchte ich gerne eine weitere Datei erzeugen, in der alle Mitarbeiter aufgeführt sind, mit dem aktuellen Urlaubsstand, Überstundenstand und ob er bereits an Fortbildungen teilgenommen hat.
Wie kann ich nun Daten aus den einzelnen Dateien ziehen um sie in der Übersicht darzustellen?
Hier im Forum wurde die Möglichkeit der Verknüpfung erwähnt. Da werden allerdings absolute Pfade verwendet. Sofern nun allerdings der Ordner umbenannt wird, bzw. verschoben wird, funktioniert das nicht mehr.
Hat jemand einen Lösungsvorschlag bzw. Tipp für mich?
Gruß
S.
Mich plagt da folgendes Problem. Ich habe den Auftrag bekommen für jeden Mitarbeiter eine Urlaubskarte anzulegen. Jeder Mitarbeiter hat eine eigene Datei, in der drei Tabellen vorhanden sind. Urlaub, Überstunden und Fortbildungen.
Nun möchte ich gerne eine weitere Datei erzeugen, in der alle Mitarbeiter aufgeführt sind, mit dem aktuellen Urlaubsstand, Überstundenstand und ob er bereits an Fortbildungen teilgenommen hat.
Wie kann ich nun Daten aus den einzelnen Dateien ziehen um sie in der Übersicht darzustellen?
Hier im Forum wurde die Möglichkeit der Verknüpfung erwähnt. Da werden allerdings absolute Pfade verwendet. Sofern nun allerdings der Ordner umbenannt wird, bzw. verschoben wird, funktioniert das nicht mehr.
Hat jemand einen Lösungsvorschlag bzw. Tipp für mich?
Gruß
S.
Wie gehst Du denn derzeitig vor?
Über
Einfügen>Externe Daten kannst Du z.B. auch einen relativen Pfad angeben.
Hinweis: Du mußt den Pfad manuell eingeben oder abändern, die Tatsache das OOo immer einen absoluten Pfad anzeigt ist so gewollt, weil automatisch aktualisiert wird. Verwendet wird jedoch der relative Pfad, wenn Du diesen ursprünglich angegeben hast.
Also: Du gibst im Dialog als Pfad an "abc.sxc" (vollständiger Pfad sei D:\Bla\Bla\Bla\abc.sxc und die gerade aktuelle Datei sei D:\Bla\Bla\Bla\abc2.sxc) nach schließen des Dialogs kannst Du Bearbeiten>Verknüpfungen öffnen, dort ist als Pfad angegeben 'file:///D:/Bla/Bla/Bla/abc.sxc' . Speichere und kopiere beide Dateien z.B. in den Ordner E:\test\ . Nach Öffnen der Datei abc2.sxc wird nach Aktualisieren der Pfad der Verknüpfung als 'file:///E:/test/abc.sxc' angezeigt.
oder über DDE:
(wenn abc.sxc und abc2.sxc im selben Verzeichnis) in eine Zelle der Datei abc2.sxc z.B. eingeben:
=DDE("soffice";"abc.sxc";"Tabelle1.A1")
-->eingelesen wird Wert in Tabelle1 Zelle A1 der Datei abc.sxc (relativer Pfad). Beim Aktualisieren von Datei abc2.sxc "ploppt" die Datei abc.sxc auf, ich weiß nicht wie man das verhindern kann.
Gruß
Stephan
Über
Einfügen>Externe Daten kannst Du z.B. auch einen relativen Pfad angeben.
Hinweis: Du mußt den Pfad manuell eingeben oder abändern, die Tatsache das OOo immer einen absoluten Pfad anzeigt ist so gewollt, weil automatisch aktualisiert wird. Verwendet wird jedoch der relative Pfad, wenn Du diesen ursprünglich angegeben hast.
Also: Du gibst im Dialog als Pfad an "abc.sxc" (vollständiger Pfad sei D:\Bla\Bla\Bla\abc.sxc und die gerade aktuelle Datei sei D:\Bla\Bla\Bla\abc2.sxc) nach schließen des Dialogs kannst Du Bearbeiten>Verknüpfungen öffnen, dort ist als Pfad angegeben 'file:///D:/Bla/Bla/Bla/abc.sxc' . Speichere und kopiere beide Dateien z.B. in den Ordner E:\test\ . Nach Öffnen der Datei abc2.sxc wird nach Aktualisieren der Pfad der Verknüpfung als 'file:///E:/test/abc.sxc' angezeigt.
oder über DDE:
(wenn abc.sxc und abc2.sxc im selben Verzeichnis) in eine Zelle der Datei abc2.sxc z.B. eingeben:
=DDE("soffice";"abc.sxc";"Tabelle1.A1")
-->eingelesen wird Wert in Tabelle1 Zelle A1 der Datei abc.sxc (relativer Pfad). Beim Aktualisieren von Datei abc2.sxc "ploppt" die Datei abc.sxc auf, ich weiß nicht wie man das verhindern kann.
Gruß
Stephan
Hallo Stephan,
zur Zeit gehe so vor, daß ich in der Zelle direkt
='file:///home/sek/Mitarbeiter/Urlaub/name.sxc'#$urlaub.G4
eintrage.
Wenn ich das über die Externen Daten machen will, komme ich leider nicht dazu, den Dialog zu beenden. Ich kann die Datei auswählen, aber keine Tabelle.
Es scheint aber trotzdem der relative Pfad verwendet zu werden.
Allerdings werden die Daten nicht automatisch aktualisiert. Der Punkt ist bei Verknüpfungen gegraut.
Das mit dem DDE ist eine "unschöne" Lösung. Das aufpoppen stört. Wenn man 20 oder auch nur 5 Mitarbeiter hat, dann poppen da jede Menge Fenster auf.
Gruß
S.
zur Zeit gehe so vor, daß ich in der Zelle direkt
='file:///home/sek/Mitarbeiter/Urlaub/name.sxc'#$urlaub.G4
eintrage.
Wenn ich das über die Externen Daten machen will, komme ich leider nicht dazu, den Dialog zu beenden. Ich kann die Datei auswählen, aber keine Tabelle.
Es scheint aber trotzdem der relative Pfad verwendet zu werden.
Allerdings werden die Daten nicht automatisch aktualisiert. Der Punkt ist bei Verknüpfungen gegraut.
Das mit dem DDE ist eine "unschöne" Lösung. Das aufpoppen stört. Wenn man 20 oder auch nur 5 Mitarbeiter hat, dann poppen da jede Menge Fenster auf.
Gruß
S.
Es hat sich noch ein weiteres Problem ergeben.
Ich hole mir ja aus der name.sxc eine bestimmte Zelle und schreibe den Inhalt in die Gesamtübersicht.
Nun ist meine Kartei so aufgebaut
Grund von bis Tage Stand
In Abbhängigkeit von dem Grund findet bei Stand eine entsprechende Berechnung statt.
Die Formel zur Berechnung habe ich nun bis Zeile 40 runterkopiert. Natürlich wird dann bis Zeile 40 immer der aktuelle Stand dargestellt. Rein optisch ist es daneben. Ich habe deshalb noch zusätzlich abgefragt, ob in Tage eine Zahl <>0 eingetragen ist. Sonst lasse ich da " " eintragen.
Nun zum Problem. Wie bekomme ich den aktuellen Urlaubsstand in die Gesamtübersicht? Da sich die Quellzelle ja je nach Anzahl der Einträge verschiebt.
Idee von mir war, daß ich den aktuellen Stand zusätzlich in eine Zelle schreibe, die ich mir dann holen kann. Allerdings weiß ich nicht, wie ich das berwerkstellen soll.
Für Tipps wäre ich dankbar
Gruß
S.
Ich hole mir ja aus der name.sxc eine bestimmte Zelle und schreibe den Inhalt in die Gesamtübersicht.
Nun ist meine Kartei so aufgebaut
Grund von bis Tage Stand
In Abbhängigkeit von dem Grund findet bei Stand eine entsprechende Berechnung statt.
Die Formel zur Berechnung habe ich nun bis Zeile 40 runterkopiert. Natürlich wird dann bis Zeile 40 immer der aktuelle Stand dargestellt. Rein optisch ist es daneben. Ich habe deshalb noch zusätzlich abgefragt, ob in Tage eine Zahl <>0 eingetragen ist. Sonst lasse ich da " " eintragen.
Nun zum Problem. Wie bekomme ich den aktuellen Urlaubsstand in die Gesamtübersicht? Da sich die Quellzelle ja je nach Anzahl der Einträge verschiebt.
Idee von mir war, daß ich den aktuellen Stand zusätzlich in eine Zelle schreibe, die ich mir dann holen kann. Allerdings weiß ich nicht, wie ich das berwerkstellen soll.
Für Tipps wäre ich dankbar

Gruß
S.
Verknüpfungen zu anderen Dateien
Gib der Zelle oder dem Zellbereich einen Namen -> Einfügen/Namen/Festlegen.
Dieser Name wird dann genau wie eine Zell- oder Bereichsadresse benutzt, aber egal wo die Zelle steht oder wie groß der Bereich ist.
Also z.b. A1='DateiXY.Tabelle1.Gesamt"
So bist Du unabhängig von der Position der Zelle oder der Bereichsgröße!
Gruß, Markus
Dieser Name wird dann genau wie eine Zell- oder Bereichsadresse benutzt, aber egal wo die Zelle steht oder wie groß der Bereich ist.
Also z.b. A1='DateiXY.Tabelle1.Gesamt"
So bist Du unabhängig von der Position der Zelle oder der Bereichsgröße!
Gruß, Markus
Huhu,
ich glaube wir haben usn mißverstanden, bzw. ich habe mich mißverständlich ausgedrückt.
Der aktuelle Wert in der Spalte Stand wandert immer nache einem neuen Eintrag eine Zeile tiefer. Erst steht er in H4, dann in H5, H6 etc. Wenn ich einen Namen vergebe, dann bliebe der bei H4 haften.
Gruß
S.
ich glaube wir haben usn mißverstanden, bzw. ich habe mich mißverständlich ausgedrückt.
Der aktuelle Wert in der Spalte Stand wandert immer nache einem neuen Eintrag eine Zeile tiefer. Erst steht er in H4, dann in H5, H6 etc. Wenn ich einen Namen vergebe, dann bliebe der bei H4 haften.
Gruß
S.
Hey SK,
die Lösung ist - wie bei tabellen so oft - die Ergebniszeile gehört einfach an den Anfang, die Datensätze darunter.
Dann ist deine Ergebnisspalte immer fix, egal wie viele Datensätze noch folgen.
Und wenn du keine Summen oder ähnliches bildest, so gibt es so schöne Formel wie maximalwert, Minimalwert, letzer Wert und vieles mehr.
Gruss
Thomas
die Lösung ist - wie bei tabellen so oft - die Ergebniszeile gehört einfach an den Anfang, die Datensätze darunter.
Dann ist deine Ergebnisspalte immer fix, egal wie viele Datensätze noch folgen.
Und wenn du keine Summen oder ähnliches bildest, so gibt es so schöne Formel wie maximalwert, Minimalwert, letzer Wert und vieles mehr.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Ich wollte Dein Problem mit einer selbstdefinierten Function lösen, ist mir bisher nicht vollkommen gelungen. Deshalb folgender Vorschlag:
Kopiere Dir in jedes der Einzeldokumente folgendes Makro und passe es an. Ordne es dem Ereignis "Dokument sichern" zu. Das Ganze funktioniert zuverlässig so Du die Änderungen in den Dokumenten nach dem Bearbeiten sicherst, aber das hast Du ja wohl ohnhin vor.
Solltest Du Probleme bei der Realisierung haben, frage nochmal nach (ich weiß nicht wie Dein Kenntnisstand ist).
Gruß
Stephan
Kopiere Dir in jedes der Einzeldokumente folgendes Makro und passe es an. Ordne es dem Ereignis "Dokument sichern" zu. Das Ganze funktioniert zuverlässig so Du die Änderungen in den Dokumenten nach dem Bearbeiten sicherst, aber das hast Du ja wohl ohnhin vor.
Code: Alles auswählen
sub LETZTE()
myDoc = stardesktop.currentcomponent
'oder anderes Blatt
mySheet = myDoc.sheets(0)
x = 0
'für Spalte D
Do
zellenwert = mySheet.getCellByPosition(3, x).value
x = x + 1
loop While zellenwert <> EMPTY
wert = mySheet.getCellByPosition(3, x-2).Value
'der interessierende Wert steht in Zelle E1
'und kann dort referenziert werden
mySheet.getCellByPosition(4, 0).value = wert
End sub
Gruß
Stephan
Ahoi,
gesagt getan
Allerdings bekomme ich bei der Ausführung einen BASIC-Syntaxfehler angezeigt in der folgenden Zeile.
Leichte Kenntnisse sind vorhanden.
Danke und Gruß
S.
gesagt getan

Wo kann ich die Basic-Befehle nachlesen? In der Hilfe konnte ich leider nichts finden.Stephan hat geschrieben:
zellenwert = mySheet.getCellByPosition(3, x).value
Leichte Kenntnisse sind vorhanden.
Danke und Gruß
S.
Niemand ist perfekt, auch ich nicht aber ich habe den Code gestestet und aus der IDE herauskopiert, einen Syntaxfehler schließe ich aus und kann jetzt hier beim Lesen keinen erkennen. Ich kann mir andere Fehler denken, aber keinen Syntaxfehler, vielleicht ist die Fehlermeldung (der Text der Meldung) falsch, steht da wirklich Syntaxfehler?Allerdings bekomme ich bei der Ausführung einen BASIC-Syntaxfehler angezeigt in der folgenden Zeile.
Die Zeile gilt so nur falls in der betreffenden Zelle ein numerischer Wert steht, steht dort kein numerischer Wert funktioniert der Code so nicht vielleicht wird das als Syntaxfehler interpretiert. Ich kann das ändern, wenn Du mir sagst was dort für ein Wert steht Formel, Text, Zahl, (Datum) . Sollte die Art des Wertes vorher nicht bekannt sein, muß man den Code so ändern das eine Prüfung stattfindet.
Ansonsten:
Ist das entsprechende Tabellendokument zum Zeitpunkt des Makrolaufs das einzige geöffnete Dokument? Ist der automatische Start des Makros dem entsprechenden Dokument zugeordnet und nicht OpenOffice? Ist das Tabellenblatt auch definitiv Blatt 0? (Sind irgendwelche Zellen geschützt etc.?)
Hier findest Du zunächst etwas mehr:
http://docs.sun.com/db/doc/817-3924?l=de
Wenn es nicht funktioniert melde Dich, falls Du es selber lösen kannst poste bitte warum es nicht funktioniert hat.
Gruß
Stephan
Moin Moin
Ich habe das Makro dem Dokument zugeordnet. Es wird auch beim Speicher ausgeführt.
In der Spalte H5 steht das akutelle Ergebnis. Errechnet wird es mit einer Formel. Es ist also kein Wert in der Zelle eingetragen, sonern eine Formel. Liegt da vielleicht der Fehler?
Gruß
S.
Hiermit melde ich mich. Es hat nicht funktioniert. Es kommt tatsächlich ein "BASIC-Syntaxfehler. Syntaxfehler"Wenn es nicht funktioniert melde Dich, falls Du es selber lösen kannst poste bitte warum es nicht funktioniert hat.
Ich habe das Makro dem Dokument zugeordnet. Es wird auch beim Speicher ausgeführt.
In der Spalte H5 steht das akutelle Ergebnis. Errechnet wird es mit einer Formel. Es ist also kein Wert in der Zelle eingetragen, sonern eine Formel. Liegt da vielleicht der Fehler?
Gruß
S.
Hey,
Kannst du aber mit einer Prüfung vorher abfangen.
Gruss
Thomas
Mit Sicherheit. Da der erste Schleifendurchgang einer Do ...while Schleife immer ausgeführt wird, wenn die Bedingung erst im While -Teil steht, bekommst du immer dann eine Fehlermeldung, wenn das Objekt (Zelle) die Eigenschaft nicht aufweist (in diesem Fall Value = ...eben nichts!)Errechnet wird es mit einer Formel. Es ist also kein Wert in der Zelle eingetragen, sonern eine Formel. Liegt da vielleicht der Fehler?
Kannst du aber mit einer Prüfung vorher abfangen.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Wenn das ganze in Spalte H stattfindet mußt Du statt:
zellenwert = mySheet.getCellByPosition(3, x).value
zellenwert = mySheet.getCellByPosition(7, x).value
verwenden.
Hinweis: ich gehe davon aus das der "aktuelle" Wert in H5 steht, in dem Sinne das wenn Du einen Weiteren ergänzt dieser dann in H6 stünde usw. . Natürlich müssen alle Zellen von H1 bis H5 irgendeinen Inhalt haben damit es funktioniert und ab H6 müssen alle leer sein.
Ich schreibe mal vorsichtshalber: vielleicht kannst Du mal probieren
loop While zellenwert <> EMPTY
durch:
loop While zellenwert <> "" oder loop While zellenwert <> 0
zu ersetzen, ich weiß aber nicht warum das nötig sein sollte.
Und nun brauchst Du noch eine feste Zelle auf dem Blatt die Du dann referenzieren kannst, dafür mußt Du diese Zeile anpassen:
mySheet.getCellByPosition(4, 0).value = wert
so wie es hier steht wäre die Zelle E1 ändere das nach Bedarf (die entsprechende Zelle darf natürlich nicht schreibgeschützt sein).
Ich habe auch den kompletten Code geprüft, ich bekomme keinen Syntaxfehler.
@toxitom
zellenwert = mySheet.getCellByPosition(3, x).value
liefert tatsächlich numerischen Wert (das Ergebnis der vorhandenen Formel), wenn Formel in der Zelle ist. Formel wird dann logischerweise geliefert bei:
zellenwert = mySheet.getCellByPosition(3, x).formula
und zwar als "String" ...
(!?)
Gruß
Stephan
zellenwert = mySheet.getCellByPosition(3, x).value
zellenwert = mySheet.getCellByPosition(7, x).value
verwenden.
Hinweis: ich gehe davon aus das der "aktuelle" Wert in H5 steht, in dem Sinne das wenn Du einen Weiteren ergänzt dieser dann in H6 stünde usw. . Natürlich müssen alle Zellen von H1 bis H5 irgendeinen Inhalt haben damit es funktioniert und ab H6 müssen alle leer sein.
Ich schreibe mal vorsichtshalber: vielleicht kannst Du mal probieren
loop While zellenwert <> EMPTY
durch:
loop While zellenwert <> "" oder loop While zellenwert <> 0
zu ersetzen, ich weiß aber nicht warum das nötig sein sollte.
Und nun brauchst Du noch eine feste Zelle auf dem Blatt die Du dann referenzieren kannst, dafür mußt Du diese Zeile anpassen:
mySheet.getCellByPosition(4, 0).value = wert
so wie es hier steht wäre die Zelle E1 ändere das nach Bedarf (die entsprechende Zelle darf natürlich nicht schreibgeschützt sein).
Ich habe auch den kompletten Code geprüft, ich bekomme keinen Syntaxfehler.
@toxitom
das hatte ich auch vermutet, aber ein test ergibt das das beim Lesen des Wertes nicht so ist:Mit Sicherheit. Da der erste Schleifendurchgang einer Do ...while Schleife immer ausgeführt wird, wenn die Bedingung erst im While -Teil steht, bekommst du immer dann eine Fehlermeldung, wenn das Objekt (Zelle) die Eigenschaft nicht aufweist (in diesem Fall Value = ...eben nichts!)
zellenwert = mySheet.getCellByPosition(3, x).value
liefert tatsächlich numerischen Wert (das Ergebnis der vorhandenen Formel), wenn Formel in der Zelle ist. Formel wird dann logischerweise geliefert bei:
zellenwert = mySheet.getCellByPosition(3, x).formula
und zwar als "String" ...
(!?)
Gruß
Stephan
So, ich habe mal daheim getestet. OO 1.1.2 installiert, allerdings in englisch. Geplant war eigentlich deutsch. Naja, nicht ganz so tragisch.
Ich habe das Makro kopiert, eingefügt, zugewiesen und es tat wie ihm geheißen - also den letzten Eintrag an die entsprechende Stelle geschrieben.
Nun stellt sich die Frage, warum das in der Firma nicht geht. Hier arbeite ich mit WinXP Pro, in der Firma mit Suse uff.. Version weiß ich nicht und halt OO 1.1.0 in deutsch.
Wie oben schon vermutet, vielleicht liegt es ja an der "alten" Version von OO?
Gruß
S.
Ich habe das Makro kopiert, eingefügt, zugewiesen und es tat wie ihm geheißen - also den letzten Eintrag an die entsprechende Stelle geschrieben.
Nun stellt sich die Frage, warum das in der Firma nicht geht. Hier arbeite ich mit WinXP Pro, in der Firma mit Suse uff.. Version weiß ich nicht und halt OO 1.1.0 in deutsch.
Wie oben schon vermutet, vielleicht liegt es ja an der "alten" Version von OO?
Gruß
S.