Variablen Dateinamen übergeben

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: Variablen Dateinamen übergeben

Re: Variablen Dateinamen übergeben

von Karolus » Do, 19.07.2012 16:35

Hallo
Ich meine nicht den Quelltext- ( den habe ich nur zusätzlich zur Anschauung mitgepostet ) -sondern die angehängte Datei mit eingebettetem Script, →
FormulaArray.ods
Speichere die bei dir, öffne sie und betätige die Schaltfläche - und berichte...

Karo
__________

Ist hier nicht relevant, aber zusätzlich die Antwort zu:
...Ich denke, dass es über Makros verwalten> Python > erstellen gehen müsste. Aber "Erstellen" ist grau unterlegt.
OOo hat keinen 'eingebauten' Editor für Python, das müsstest du unabhängig von OOo mit einem vernünftigen Texteditor machen, und ins Verzeichnis ~/3/user/Scripts/python/ speichern.
***../3/user/.. findest du über →Extras→Optionen→OOo→Pfade...

Re: Variablen Dateinamen übergeben

von TorSo » Do, 19.07.2012 16:00

Hallo Karolus,

Deine ersten beiden Fragen kann ich mit ja beantworten.
Zur dritten Frage: Wenn ich´s richtig verstehe ist der Code in Python geschrieben. Wie sage ich OO das es kein Basic-Modul ist? Ich denke, dass es über Makros verwalten> Python > erstellen gehen müsste. Aber "Erstellen" ist grau unterlegt.

Wo ist mein Fehler?


Gruß TorSo

Re: Variablen Dateinamen übergeben

von Karolus » Do, 19.07.2012 15:44

Hallo
Ich fasse nochmal zusammen:
1)- Es gibt bei dir den Ordner C:/Auftrag/2012/ ?
2)- in dem Ornder sind rund 25 Calcdateien als .ods gespeichert ?
3)- du hast meine Beispieldatei bei dir gespeichert, kannst sie öffnen und bearbeiten ?
4)- Du startest das eingebettete Script über die Schaltfläche und OOo rödelt endlos vor sich hin ohne fertig zu werden , ohne irgendeine Fehlermeldung ?

Karo

Re: Variablen Dateinamen übergeben

von TorSo » Do, 19.07.2012 14:59

Ich selbst nochmal,

entschuldige, dass ich den ersten Teil Deiner Antwort eben ignoriert habe. Ich habe null Ahnung von Python. Weiss auch nicht, wo ich Deinen Code hinpacken soll und die Geschichte mit Array ist für mich auch noch Neuland. Aber da bin ich momentan dran, es zu verstehen.


Gruß TorSo


PS: Es heisst natürlich "Standard" und nicht "Standart". :-)

Re: Variablen Dateinamen übergeben

von TorSo » Do, 19.07.2012 14:53

Danke erstmal für die schnelle Antwort,

ich bekomme leider keine Fehlermeldung. OO schreibt lediglich unter dem Arbeitsbereich "Berechnen". Manchmal sehe ich auch ein "Zeilenhöhe anpassen" ( wobei ich mich da frage, was angepasst werden soll, da ich in allen Mappen die Standartzeilenhöhe habe und auch Schriftart und -größe identisch sind ).

Bei einer Fehlermeldung wäre ich ja schon froh, da könnte man es ja zumindest eingrenzen, woran es liegt. Hab aber auch keine Möglichkeit es mal auf einem anderen Rechner zu testen.
Was ich allerdings ab und zu zu lesen bekomme ist, dass angeblich Java nicht richtig funktioniert bzw. beschädigt. Diese Meldung kommt allerdings unabhängig davon, welche Version ich gewählt habe.


Gruß TorSo

Re: Variablen Dateinamen übergeben

von Karolus » Do, 19.07.2012 14:27

Hallo
Beim Tip von Karolus bin ich allerdings noch recht hilflos.
Du müsstest aber schreiben wo und was nicht klappt ...( bekommst du Fehlermeldungen - wenn ja, welche ? )
Wäre es evtl. eine Lösung, das Auslesen der Zellen mit ins Makro zu packen. Ich meine damit, dass, wenn die erste Datei der Liste eingetragen wurde auch gleich die entsprechende Zelle der Datei ausgelesen wird und dann weiter mit der zweiten Datei?
Diesen Ansatz habe ich im dem Beispiel aufgenommen und zuende gedacht, und gleich die fertigen Formeln zusammengestellt, das ganze läuft hier mit ca. 15 .ods Dateien etwa 2 sec vom Aufruf bis zur Auflösung der Formeln.

Karo

Re: Variablen Dateinamen übergeben

von TorSo » Do, 19.07.2012 13:44

Hallo zusammen,

dank Eurer Vorschläge habe ich zumindest wieder einiges dazugelernt bzw. bin noch dabei es zu verstehen.
Beim Tip von Karolus bin ich allerdings noch recht hilflos. Bin froh, wenn ich die Basic-Geschichten verstehe. Ist aber ein Anlass sich auch mal mit anderen Dingen auseinander zu setzen.

Regina´s Hinweis konnte ich umsetzen, jedoch stosse ich wieder auf mein altes Problem. Wenn ich ich die Dateiliste per Makro erstelle, steigt mir OO komplett aus.

Wäre es evtl. eine Lösung, das Auslesen der Zellen mit ins Makro zu packen. Ich meine damit, dass, wenn die erste Datei der Liste eingetragen wurde auch gleich die entsprechende Zelle der Datei ausgelesen wird und dann weiter mit der zweiten Datei?
Falls es machbar, wäre ich für einen Denkanstoss wieder sehr dankbar.

Der Gedanke beruht darauf, dass das Auslesen ja funktioniert, aber scheinbar nicht alle Dateien auf einmal.



Gruß TorSo

Re: Variablen Dateinamen übergeben

von regina » Di, 17.07.2012 16:54

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.

Re: Variablen Dateinamen übergeben

von Karolus » Di, 17.07.2012 15:36

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) 123-mal heruntergeladen
Karo

Re: Variablen Dateinamen übergeben

von TorSo » Di, 17.07.2012 10:16

Ich nochmal kurz,

die Auflistung startet natürlich in A5 und nicht wie im Kommentar geschrieben in B3.

Re: Variablen Dateinamen übergeben

von TorSo » Di, 17.07.2012 10:15

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

von theindless » Mo, 16.07.2012 22:03

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

von TorSo » Mo, 16.07.2012 11:35

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

von Inopel » Sa, 14.07.2012 22:51

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

von Karolus » Sa, 14.07.2012 22:11

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

Nach oben