Variablen Dateinamen übergeben

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

TorSo
**
Beiträge: 22
Registriert: Mi, 11.04.2012 10:47

Variablen Dateinamen übergeben

Beitrag 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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Variablen Dateinamen übergeben

Beitrag von Karolus »

Hallo

Code: Alles auswählen

=DDE("soffice"; A5 ; "Daten.B31" )
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
TorSo
**
Beiträge: 22
Registriert: Mi, 11.04.2012 10:47

Re: Variablen Dateinamen übergeben

Beitrag 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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Variablen Dateinamen übergeben

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
TorSo
**
Beiträge: 22
Registriert: Mi, 11.04.2012 10:47

Re: Variablen Dateinamen übergeben

Beitrag 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
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Variablen Dateinamen übergeben

Beitrag von theindless »

Hallo,

das Datum wird im Hintergrund vollständig als Zahl gespeichert, auch wenn du die Formatierung JJJJ verwendest.

Versuchs mal mit

Code: Alles auswählen

=Jahr(jetzt())
in Zelle A3

und der Formel

Code: Alles auswählen

=DDE("soffice"; "C:/Auftrag/" & A3 & "/" & A5 ; "Daten.B31" )
theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Inopel
**
Beiträge: 33
Registriert: Sa, 25.03.2006 18:36

Re: Variablen Dateinamen übergeben

Beitrag 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
Windows 7 Pro / 64bit
Apache OpenOffice™ 4.0.1
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Variablen Dateinamen übergeben

Beitrag 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:

Code: Alles auswählen

=DDE("soffice"; B1 ; C1 )

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Inopel
**
Beiträge: 33
Registriert: Sa, 25.03.2006 18:36

Re: Variablen Dateinamen übergeben

Beitrag 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.
Windows 7 Pro / 64bit
Apache OpenOffice™ 4.0.1
TorSo
**
Beiträge: 22
Registriert: Mi, 11.04.2012 10:47

Re: Variablen Dateinamen übergeben

Beitrag 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
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Variablen Dateinamen übergeben

Beitrag 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
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
TorSo
**
Beiträge: 22
Registriert: Mi, 11.04.2012 10:47

Re: Variablen Dateinamen übergeben

Beitrag 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
TorSo
**
Beiträge: 22
Registriert: Mi, 11.04.2012 10:47

Re: Variablen Dateinamen übergeben

Beitrag von TorSo »

Ich nochmal kurz,

die Auflistung startet natürlich in A5 und nicht wie im Kommentar geschrieben in B3.
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Variablen Dateinamen übergeben

Beitrag 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.
FormulaArray.ods
(14.9 KiB) 122-mal heruntergeladen
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
regina
****
Beiträge: 181
Registriert: So, 30.07.2006 14:41

Re: Variablen Dateinamen übergeben

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