0

CSV-Ausgabe um Spaltenausgabesteuerung erweitern

Ich möchte ein Jahresinhaltsverzeichnis einer Publikation zusammentragen und via CSV-Export in InDesign laden, ohne vorher noch einmal die CSV-Datei bereinigen zu müssen. Das ist nämlich erforderlich, da die Sortierung in 3 Ebenen (Seite, Ausgabe und Jahrgang) nur via Workaround-Funktion möglich ist und diese Spalte nicht ausgeblendet werden kann. Zudem wird zwar erfolgreich gruppiert (nach Rubrik) eine Zwischenzeile in die CSV geschrieben, aber je Record wird die Gruppe nochmals mit ausgegeben. – Gibt es für diese Dinge einen Workaround? Andernfalls würde ich ein Feature vorschlagen: Beim CSV-Ausgabe-Dialog sollte die Möglichkeit bestehen, die auszugebenden Spalten individuell zu aktivieren/deaktivieren unabhängig von der Tebllenansicht.

11 Antworten

null
    • Support
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Erzeugen Sie die csv-Datei in Ninox mit der Funktion:
    –––
    createTextFile(this, "Hello World", "hello.csv")
    ---

    Birger

    • RaIp
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Vielen Dank!

    Mit Probieren und der Referenz bin ich nicht weitergekommen. Wofür stehen die Argumente? Ich vermute folgendes:

    this -> diese Tabelle ?
    "Hello World" -> Inhalt, der auszugeben ist, hier beispielhaft der string "Hello World". Stattdessen könnte vermutlich an dieser Stelle auch ein aus Tabellenspalten generierter String wie
    Ueberschrift + " " + format(Ausgabe, "00") + "/" + format(Startseite, "00")
    stehen. ?
    "hello.csv" -> ggf. Ausgabedateipfad + Dateiname

    Wie stoße ich die Ausgabe an?
    Ich habe im Datensatzformular einen Button "CSV-Ausgabe" angelegt und die Funktion 1:1 dort eingetragen. Das ergab keinen Syntaxfehler. Ich habe erwartet, dass nach Anklicken des Button die Datei hello.csv mit dem Inhalt "Hello World" im Zielordner angelegt wird. Es kommen keine Fehlermeldungen. Es wird aber auch keine Datei angelegt.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo, deine Vermutung ist richtig. Die Syntax lautet:

     

    createTextFile(ID, TEXT, DATEINAME)

    ID = Datensatz, dem die Datei angehängt werden soll (Variable oder "this" für den aktuell geöffneten).
    TEXT = Der Text, der in der Datei gespeichert werden soll. Kann sich aus mehreren Text-Elementen zusammensetzen.
    DATEINAME = String mit dem vollständigen Namen inkl. Dateityp, unter dem die Datei gespeichert werden soll.

     

    Birgers Beispiel sollte also genau so funktionieren, deine Variante ebenfalls. Zumindest im Browser und in der Mac-App. Was mich allerdings etwas irritiert, ist der "Ausgabepfad". Einen solchen kann man m. W. nicht angeben, nur den vollständigen Dateinamen.

     

    Ansonsten vielleicht noch mal genau die Syntax und ggf. die beteiligten Datenfelder überprüfen.

    • RaIp
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo CopyTexter,

    ID = Datensatz, dem die Datei angehängt werden soll

    Das irritiert mich nun wieder, denn es soll keinem Datensatz ein File hinzugefügt werden. Es sollen vielmehr gruppierte, gefilterte und sortierte Teile der Tabelle  in eine externe (CSV- bzw. TXT-)Datei geschrieben werden. Also quasi ein gesteuerter Export mit mehr Möglichkeiten als über die CSV-Exportfunktion. - Daher evtl. auch Deine Irritation bzgl. des Ausgabepfades.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Ralp, ein script-gesteuertes Exportieren von Daten ist meines Wissens (noch) nicht möglich. Die Funktion createTextFile() macht genau das, was oben beschrieben ist: Sie erzeugt innerhalb der Ninox-Tabelle einen Dateianhang, der sich durch Anklicken herunterladen lässt. Man hat natürlich die Wahl, welchem Datensatz die Datei angehängt wird, könnte also bspw. eine Art Dashboard mit nur einem Datensatz erstellen und die Datei dort generieren und anhängen. Am technischen Vorgehen ändert das aber nichts.

    Möglicherweise lässt sich die Übernahme der Datei an einen bestimmten Ort per API bzw. Integrationstools wie Zapier oder Integromat bewerkstelligen, ich wüsste aber jetzt keinen Weg, das mit Ninox-Bordmitteln zu automatisieren. Vielleicht haben andere Nutzer da noch Tipps.

    • RaIp
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ahhh! So ist das. - Das sollte unbedingt im Handbuch ergänzt werden. Bitte auch der Vollständigkeit halber dazuschreiben, wie die erzeugte Datei erreichbar ist (erscheint im Reiter "Dateianhänge" im Formularblock).

    Die Funktion heißt createTextFile(ID, TEXT, DATEINAME). Das impliziert, das bei jedem Aufrauf die Datei neu generiert wird, ohne Rücksicht auf vorhandene Inhalte, was auch in der Praxis tatsächlich so ist. Gibt es auch eine Funktion, die etwas an eine existirende Datei anhängt, z.B. appendTextFile(ID, TEXT, DATEINAME)?

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Nein, eine "append"-Funktion gibt es m. W. nicht. Ich wüsste allerdings so auf Anhieb auch nicht, wozu man sie gebrauchen könnte. Denn vorrangiger Zweck der Funktion createTextFile() ist ja, bestimmte Daten aus einer Tabelle zu einem bestimmten Zeitpunkt fest in eine eigenständige Datei zu schreiben, in welchem Format und für welchen Zweck auch immer (TXT, CSV, HTML ...). Wenn neue Daten dazukommen, kann man die Textdatei ja auch neu generieren.

    Oder welchen Anwendungsfall hast du vor Augen, bei dem "etwas an eine existierende Datei" angehängt werden müsste, ohne dass die vorhandenen Inhalte auch wieder mit generiert werden könnten?

    • RaIp
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich müsste in meinem Eingangs genannten Fall als Workaround meine Tabelle sortiert, gefiltert und gruppiert in eine Datei schreiben. Da würde eine append-Funktion das Script übersichtlicher machen, da der Code für den String für den Dateiinhalt nicht ganz so komplex ausfallen dürfte.

     

    Allgemein, denke ich, haben beide Funktionen  eine Berechtigung. Die eine braucht man, wenn es darum geht, einen bestimmten Zustand extern zu fixieren. Die andere, wenn z.B. etwas extern protokolliert werden soll. Oder für den Export-Workaround eben.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Na ja, prinzipiell stelle ich mir den Code für das Hinzufügen von Daten tendenziell eher sogar etwas umfangreicher vor, weil man die bereits vorhandenen Daten ja herausfiltern muss, damit sie nicht auch jedesmal wieder neu mit in die Datei geschrieben werden. Es sei denn, es handelt sich um Daten, die regelmäßig gelöscht werden, nachdem sie in die Textdateil geschrieben wurden.

    In den meisten Fällen dürfte es aber darum gehen, bspw. alle Rechnungen des laufenden Jahres, eine Liste mit Artikeln oder ähnliches in eine Datei zu schreiben, um sie extern weiter zu verarbeiten. Und diese Datei erzeugt man dann halt nach aktuellem Stand einfach immer wieder komplett neu (und hat damit ganz nebenbei auch eventuelle Änderungen der bereits in die Textdatei geschriebenen Daten berücksichtigt).

    Aber - du hast schon recht, es lassen sich sicher auch für ein Hinzufügen von Daten an eine bestehende Textdatei sinnvolle Anlässe finden. Du kannst den Wunsch nach einer entsprechenden Funktion ja in die Change-Request-Liste schreiben.

    • RaIp
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Gibt es noch eine andere Change-Request-Liste? Habs doch etra hier unter "Hilfe > Forum > Ideen & Anregungen" gepostet.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Zugegeben, das ist ein Argument ... ;)

     

    Aber es gibt tatsächlich eine CR-Liste. Sie liegt als Datenbank namens "Change Requests" im "Ninox Beta Team". Um Mitglied dieses Teams zu werden und auf die Datenbank zugreifen zu können, genügt es, eine kurze Mail an den Support zu schreiben mit der Bitte um Aufnahme in das "Ninox Beta Team". Dann kannst du diese (und andere) Ideen bzw. auch Fehlerhinweise selbst dort eintragen und auch den Status verfolgen.

     

    Oder du hoffst darauf, dass einer der Ninox-Supporter diesen Thread sieht, deine Idee auch gut findet und in die CR-Liste einträgt. Entscheide selbst. ;)

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 11Antworten
  • 3015Ansichten