Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03202.jsonl.gz/2119

Inhalt von Tabellenspalten in fixen Wert ändern
Hallo Uwe!
Du schreibst an einem Wochentag, nachts um elf mal eben noch ein Script und hast DABEI noch die Muse, es mit erläuternden Erklärungen für einen Anfänger zu versehen?
Ich bin sprachlos.
Also, zunächst einmal: Dein Script läuft perfekt! Hätte ich einen Hut, würde ich ihn ziehen. Vielen lieben Dank!
Jetzt schauen wir mal, ob ich deine Erklärung verstanden habe *hust*
Mit Hilfe von "InDesign automatisieren", durch das ich mich gerade mühsam durchkämpfe geht mein Verständnis jetzt so weit:
1) InDesign baut sich hirarchisch auf. Oben steht die Anwendung, in der das Dokument liegt, darin die Seite und der Textrahmen. Im Extramen liegt der Absatz und im Absatz liegt das ZEICHEN, der Character.
2) Dieses Zeichen kann alles sein, was in diesem Textabschnitt des Textrahmens eingefügt ist, ein Buchstabe, eine Zahl, ein Sonderzeichen.
Aber auch komplexere Sachen sind möglich: Füge ich an dieser Stelle einen Bildrahmen in den Text ein, oder plaziere eine Tabelle, so wird auch die Tabelle oder der Rahmen ALS GANZES zu einem Character, den ich finden und beeinflussen kann.
Jeder mögliche Charakter hat einen bestimmten Code (eine Tabelle z.B. 0016) und dazu entsprechend bestimmte Eigenschaften, die ich verändern kann.
(Dann müsste ja logischerweise ein einzelner Buchstabe ebenfalls einen eigenen Code besitzen? Das bedeutet dann doch, das InDesign z.B. den Buchstaben "A" beim eintippen nur ANZEIGT, im Hintergrund aber einen Character mit dem Wert XY gespeichert hat? Also "Hier steht nicht "A", sondern Character XY, und in DIESER Font wird Character XY als "A" dargestellt, in einer ANDEREN Font ist CHaracter XY als chinesisches Schriftzeichen oder als Bild von einem Blümchen hinterlegt...)
3) Dein Script sucht jetzt im gesamten Dokument den gesamten Textfluss
aller Textrahmen nach diesem Character 0016, der eine Tabelle darstellt, und zwar unabhängig davon, wo dieser Charakter steht.
Das funktioniert deshalb, weil eine Tabelle IMMER in einem Textrahmen steht, und deshalb immer als CHaracter 0016 gefunden werden kann.
Dein erstes Script halt nach etwas anderem gesucht, ich kann es nur so definieren: Finde ein Objekt "Tabelle", zähle die Zeilen und Spalten runter, ändere die definierten Zellen und gehe zur nächsten Tabelle. Es geht also nicht direkt auf den INHALT der Tabelle ein und übersieht deshalb Einträge, die auf einer tieferen Ebene stehen.
4) Wenn alle Character 0016 gefunden wurden sortiert sich das Script die Tabellen, schmeißt die irgendwo im Speicher auf einen Haufen und sorgt dafür das die "gleichwertig" sind, also nicht auf verschiedenen Ebenen verschachtelt, sondern schön sauber nebeneinander gelegt wie Spielkarten.
5) Jetzt, wo für das Script alle Tabellen gleichwertig sind, kann dein Codeschnipsel ganz einfach die Zellen abzählen, denn jetzt beginnen für das Script alle Zellen oben links, unabhängig davon, wie die tatsächliche Struktur im Dokument ist.
Wenn ich jetzt den Unterschied zwischen beiden Scripten beschreiben soll würde ich einen Vergleich dazu nehmen.
Ein Hütchenspieler sagt zu seinem Publikum: "Finde die Erbse"
Bei deinem ersten Script sagt der Zuschauer: "Öffne Hut 1"
Der Hütchenspieler hebt Hut 1 hoch. Ist eine Erbse drunter, zeigt der Zuschauer drauf, ist keine drunter, macht er nichts.
Dann macht er weiter mit "Öffne Hut 2", "öffne Hut 3" usw.
(Das das gegen die Regeln ist ignoriere ich hier mal, und auch das abzählen der Tabellenzellen. Mir gehts nur um den Vergleich...)
Das Problem bei denem ersten Script ist, das nicht ALLE Erbsen gefunden werden, denn manchmal hat der Hütchenspieler NOCH einen Hut über den Hut mit der Erbse gelegt.
Sagt der Zuschauer also "öffne Hut 1" dann sieht er keine Erbse, sondern NOCH einen Hut. Den ignoriert er aber und geht direkt weiter zu Hut 2.
In deinem zweiten Scrikt ist der Zuschauer radikaler.
Er sagt "Öffne ALLE Hüte"
Oder besser gesagt, er sagt: "ZEIGE mir alle Hüte, DANN legst du bitte jeden Hut EINZELN auf den Tisch und DANN öffnest du die Hüte. Er löst also die Verschachtelungen auf und der Trick "Hut im Hut" funktioniert nicht mehr.
So weit, so falsch von mir ;-)
Achim
Nachtrag:
Der Array in deinem Script ist also der warme, gemütliche Platz, an dem die gefundenen Suchergebnisse wohnen? Quasi ein gedachter großer Topf aus dem ich mir dann nacheinander die Werte fischen kann?
Ich schließe daraus: Wenn ich etwas suche, das ich bearbeiten oder verändern möchte, muß ich die Suchergebnisse erstmal irgendwo hinschieben.
Brauche ich also Seitenzahlen für einen Index, oder bestimmte Textabschnitte um sie zu formatieren, picke ich sie aus dem Dokument, lege sie in einen Array und von DORT aus kann sie dann ein Script nehmen und bearbeiten.
Ein Script greift also programmiertechnisch nicht direkt in die Dokumentstruktur ein, sondern arbeitet in diesem virtuellen Sammelbecken, weil es hier einfacher ist, auf Objekte zuzugreifen, da die Dokumentstruktur nicht mehr "im Weg" ist...
als Antwort auf: [#517549]
(Dieser Beitrag wurde von Der Schnitter am 20. Sep 2013, 09:54 geändert)