Verknüpfungen zu verschiedenen Dateien

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Verknüpfungen zu verschiedenen Dateien

Beitrag von SK »

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.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

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
SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Beitrag von SK »

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.
SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Beitrag von SK »

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.
mstehl
Beiträge: 6
Registriert: Do, 15.07.2004 15:51

Verknüpfungen zu anderen Dateien

Beitrag von mstehl »

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
SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Beitrag von SK »

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.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

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.

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
Solltest Du Probleme bei der Realisierung haben, frage nochmal nach (ich weiß nicht wie Dein Kenntnisstand ist).

Gruß
Stephan
SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Beitrag von SK »

Ahoi,

gesagt getan ;) Allerdings bekomme ich bei der Ausführung einen BASIC-Syntaxfehler angezeigt in der folgenden Zeile.
Stephan hat geschrieben:
zellenwert = mySheet.getCellByPosition(3, x).value
Wo kann ich die Basic-Befehle nachlesen? In der Hilfe konnte ich leider nichts finden.

Leichte Kenntnisse sind vorhanden.

Danke und Gruß

S.
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Beitrag von pmoegenb »

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Allerdings bekomme ich bei der Ausführung einen BASIC-Syntaxfehler angezeigt in der folgenden Zeile.
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?
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
SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Beitrag von SK »

Moin Moin
Wenn es nicht funktioniert melde Dich, falls Du es selber lösen kannst poste bitte warum es nicht funktioniert hat.
Hiermit melde ich mich. Es hat nicht funktioniert. Es kommt tatsächlich ein "BASIC-Syntaxfehler. Syntaxfehler"

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.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey,
Errechnet wird es mit einer Formel. Es ist also kein Wert in der Zelle eingetragen, sonern eine Formel. Liegt da vielleicht der Fehler?
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!)
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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

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
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!)
das hatte ich auch vermutet, aber ein test ergibt das das beim Lesen des Wertes nicht so ist:
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
SK
*
Beiträge: 11
Registriert: Do, 15.07.2004 12:51

Beitrag von SK »

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.
Antworten