CSV-Ausgabe um Spaltenausgabesteuerung erweitern
R

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.

Ninox Profile

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

Birger

R

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 Profile

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.

R

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 Profile

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.

R

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 Profile

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?

R

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 Profile

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.

1 2
Antworten