Seite 1 von 2
Variablen Dateinamen übergeben
Verfasst: Fr, 13.07.2012 11:06
von TorSo
Hallo zusammen,
ich habe eine wahrscheinlich sehr triviale Frage.
Mit
='file:///C:/Auftrag/2012/00370 - 2012.ods'#$Daten.B31
kann ich aus der angewählten Datei die Zelle auslesen. Nun ist aber der Dateiname variabel und steht in Zelle A5.
Was muss ich ändern damit immer die entsprechende Zelle der ausgewählten Datei ausgelesen wird.
Vielen Dank für Eure Hilfe
TorSo
Re: Variablen Dateinamen übergeben
Verfasst: Fr, 13.07.2012 11:35
von Karolus
Re: Variablen Dateinamen übergeben
Verfasst: Fr, 13.07.2012 11:54
von TorSo
Hallo Karolus,
und danke für die Antwort. Aber kann es sein, dass ich jetzt noch irgendwo den Pfad angeben muss?
Denn wenn ich es so übernehme, wie Du es beschreibst, findet OO nix.
Gruß TorSo
Re: Variablen Dateinamen übergeben
Verfasst: Fr, 13.07.2012 12:13
von Karolus
Hallo
In A5 steht
nur der Dateiname ohne den Rest des Pfads ? →
Code: Alles auswählen
=DDE("soffice"; "C:/Auftrag/2012/" & A5 ; "Daten.B31" )
Karo
Re: Variablen Dateinamen übergeben
Verfasst: Fr, 13.07.2012 13:18
von TorSo
Danke nochmals, Karolus,
Deine Vorschlag macht was er soll.
Vielleicht darf ich aber nochmals auf Hilfe hoffen.
Die Jahreszahl in der Pfadangabe ist natürlich nicht immer 2012. Nun habe ich in Zelle A3 das Jahr über die Funktion jetzt() eingefügt, die Zelle mit JJJJ Formatiert und möchte nun den Pfad + A3 + A5 in der Formel unterbringen. Habe nun schon wieder hin- und herprobiert. Bekomme immer wieder Fehlermeldungen.
Ich vermute, dass ich mit den " oder & noch etwas falsch mache.
Oder muss ich nun evtl. in der Formel noch das Format für das Jahr mitgeben und wenn ja, wie?
Gruß TorSo
Re: Variablen Dateinamen übergeben
Verfasst: Fr, 13.07.2012 15:08
von theindless
Hallo,
das Datum wird im Hintergrund vollständig als Zahl gespeichert, auch wenn du die Formatierung JJJJ verwendest.
Versuchs mal mit
in Zelle A3
und der Formel
Code: Alles auswählen
=DDE("soffice"; "C:/Auftrag/" & A3 & "/" & A5 ; "Daten.B31" )
theindless
Re: Variablen Dateinamen übergeben
Verfasst: Sa, 14.07.2012 20:32
von Inopel
hmm... versuche grad es bei mir mit einzubinden, nur irgendwie geht es nicht. kommt nur immer err:510.
Code: Alles auswählen
=DDE("soffice"; d:/die firma/firmamaler umsatzübersicht.ods'#$zahlungseingänge.j3)
ist daran was falsch? wenn ja was und wieso
ich dank euch
Re: Variablen Dateinamen übergeben
Verfasst: Sa, 14.07.2012 22:11
von Karolus
Hallo
DDE möchte ...
a) zwei
getrennte Argumente für
Dateipfad und
Zelladdresse
und
b) möchte es diese Argumente im Gegensatz zu den üblichen Zellverweisen in Textform.
Code: Alles auswählen
=DDE("soffice"; "d:/die firma/firmamaler umsatzübersicht.ods" ; "zahlungseingänge.J3" )
angenommen der Pfad und die Adresse sind in den Zellen B1 und C1 eingetragen, geht dann:
Karo
Re: Variablen Dateinamen übergeben
Verfasst: Sa, 14.07.2012 22:51
von Inopel
ah gut, jetzt komme ich klar damit.
dank dir karo.
nur wieso öffnet er jetzt immer die datei schreibgeschützt seitdem ich die daten so abrufe?
habe eben mit dem entwurfsmodus getestet, dachte der wäre es gewesen. ist er aber nicht.
muss dazu sagen das ich über ein button die umsatz-datei aus von einer anderen datei aus aufrufe. und da wird mir jetzt der aktuelle wert immer angezeigt. so brauch ich nicht immer die umsatz-datei aufrufen.
Re: Variablen Dateinamen übergeben
Verfasst: Mo, 16.07.2012 11:35
von TorSo
Erstmal wünsche ich allen hier einen guten Start in die neue Woche.
Dann wiedermal vielen Dank für die gute Hilfe von Euch.
Der Vorschlag von theindless funktioniert fast. Ich habe die Formel der Länge entsprechend meiner Dateiliste runterkopiert. Wenn ich aber nun per Makro die Dateiliste aktualisiere steigt OO komplett aus. Trage ich die Formel für jede Zeile per Hand ein, dann geht´s.
Wo ist der Haken an der Sache.
Vielleicht in diesem Zusammenhang noch wichtig.
Die Liste ist max. 25 Einträge lang.
Es läuft OO 3.4.0 ( noch ) auf Win XP.
Gruß TorSo
Re: Variablen Dateinamen übergeben
Verfasst: Mo, 16.07.2012 22:03
von theindless
Hallo,
torso ich vermute hier kann dir nur mit einer Beispieldatei geholfen werden.
Zumindest dein Macro müsstest mal zur Verfügung stellen.
theindless
Re: Variablen Dateinamen übergeben
Verfasst: Di, 17.07.2012 10:15
von TorSo
Guten Morgen, Ihr fleissigen Helfer,
Das Makro stell ich Euch gern zur Verfügung. Vielleicht kennt Ihr´s ja auch schon. Hab ich schliesslich hier gefunden.
Code: Alles auswählen
REM listet alle Dateien eines Verezeichnisses in einem
REM Calc-Sheet auf
Sub Dateien_auflisten
dim sPfad as string
dim oSheet as Object
dim iSp as integer, iZe as Long
oSheet = thisComponent.sheets.getByName("Tabelle1")
iSp = 0 : iZe = 4 'Startzeile der Auflistung B3
sPfad = ConvertToUrL("C:\Auftrag\" & year(now()) & "\")
nextFile = dir(sPfad, 0) 'die erste Datei
Do while nextFile <> ""
oSheet.getCellByPosition(iSp, iZe).string = nextFile
iZe = iZe + 1
nextFile = Dir
loop
End Sub
Lasse ich das Makro in einem leeren Tabellenblatt laufen, listet es mir eins, zwei, fix alle Dateien des Ordners auf. Habe ich aber in den Zellen daneben die Formel zum auslesen der Zelle drin, dann kommen die Komplikationen. Zu Testzwecken habe ich auch schon die Dateinamen händisch eingefügt und dabei gab´s keine Probleme. Aber das ist ja nicht das Ziel meiner Übung.
Gruß und Dankeschön für Eure offnenen Ohren / Augen
Re: Variablen Dateinamen übergeben
Verfasst: Di, 17.07.2012 10:16
von TorSo
Ich nochmal kurz,
die Auflistung startet natürlich in A5 und nicht wie im Kommentar geschrieben in B3.
Re: Variablen Dateinamen übergeben
Verfasst: Di, 17.07.2012 15:36
von Karolus
Hallo
Schreib die Dateinamen nicht einzeln nacheinander sondern alle auf einmal mit
...setDataArray()
oder nimm gleich
...setFormulaArray() und pack dort die fertigen Formeln rein:
Mit Python:
Code: Alles auswählen
# -*- coding: utf-8 -*-
from glob import glob
context = XSCRIPTCONTEXT
def set_formulas(dummy=None):
doc = context.getDocument()
sel = doc.getCurrentSelection()
template = """='file://%s'#Daten.B31"""
sheet = sel.getSpreadsheet()
icol = sel.RangeAddress.StartColumn
irow = sel.RangeAddress.StartRow
formulas = [( template % f,) for f in glob(r'C:/Auftrag/2012/*.ods')]
endrow = len( formulas ) + irow -1
outrange = sheet.getCellRangeByPosition(icol, irow, icol, endrow)
outrange.setFormulaArray( tuple( formulas ))
Die Angehängte Datei ist noch mit fixen Pfadangaben im Quellcode, das kann man aber noch ändern in Pfadangaben aus anderen Zellen oder per Auswahldialog.
Karo
Re: Variablen Dateinamen übergeben
Verfasst: Di, 17.07.2012 16:54
von regina
Du kannst dir auch den gesamten Pfad inklusive des Ankers in der Zelle zunächst als Text in einer Zelle des Tabellenblatts zusammenbauen und dann mit der Funktion INDIREKT arbeiten.
Wenn beispielsweise B1 den Text "'file:///C:/Auftrag/2012/00370 - 2012.ods'#$Daten.B31" enthält (ohne die äußeren Anführungszeichen), dann erhältst du den tatsächlichen Zugriff auf die Zelle mit der Formel =INDIREKT(B1)
In B1 brauchst du das ganze natürlich nicht als Konstante anzulegen, sondern kannst es dir zusammenbauen, beispielsweise
="'file:///" & A1 & "'#" & A2
wobei A1 den Text "C:/Auftrag/2012/00370 - 2012.ods" enthält und A2 den Text "$Daten.B31" (ohne die aüßeren Anführungszeichen).
Du kannst den Ausdruck "'file:///" & A1 & "'#" & A2 auch direkt bei INDIREKT hineinschreiben, also
=INDIREKT("'file:///" & A1 & "'#" & A2)
Aber das macht die Anpassung und Fehlersuche etwas mühsamer.