hilfdirselbst.ch
Facebook Twitter gamper-media
Der Schnitter
Beiträge: 8
18. Sep 2013, 16:29
Beitrag #1 von 15
Bewertung:
(4934 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo!

Ich bin auf der Suche nach einer kompfortabelen Lösung für ein InDesign-Problem:

- Ich habe einen Katalog, 800 Seiten, 16 Kapitel, viele viele Tabellen unterschiedlicher Länge und Spaltenzahl.

- Bei jeder Tabelle gleich: Die Spalte "Kennziffer", in der, durch Buchstaben und Zahlen verschlüsselt, die Einkaufspreise und UVPs stehen.

Meine Aufgabe: Aus dem fertigen Katalog einen Zweiten machen, in dem KEINE Preise stehen.

Dafür gibt es für mich bis jetzt 2 Lösungswege:

1) Den Katalog OHNE Preise neu aus der Datenbank auslassen und die händischen Änderungen im Text und Layout wiederholen. Dabei laufe ich natürlich Gefah,r Dinge zu übersehen.

2) Die Spalte "Kennziffer" in jeder Tabelle löschen und die Tabelle wieder auf die ursprüngliche Breite bringen, damit das Layout nicht zerschossen wird. Aber das ist zum einen eine Schweinearbeit und zum anderen duch die vermalledeite Struktur der Templates nicht wirklich effektiv.

Deshalb meine Frage:

Ist es möglich, mittels eines Scriptings den Inhalt ALLER Kennziffer-Spalten mit einem festen Wert zu überschreiben, also in etwa folgendes durchzuführen:

- Durchsuche das gerade geöffnete InDesign-Dokument nach Tabellen.

- finde in der Tabelle die Spalte "Kennziffer"

- Lösche den Inhalt der Tabellenzellen unter "Kennziffer" und ersetze sie durch "0000"

- finde die nächste Tabelle... usw


Ich FRAGE, statt es selbst auszuprobieren, weil ich selber gerade erst entdecke wie faszinierend diese Scriptings sein können und was für unglaubliche Möglichkeiten man damit hat.
Mein Verständnis reicht momentan höchstens dazu, bestehende Scripte mit etwas anderen Variabelen anzupassen, aber nicht, um etwas Neues zu kreieren.

Allerdings... Ich arbeite dran. versprochen ;-)

Mit besten Grüßen

Achim
(Dieser Beitrag wurde von Der Schnitter am 18. Sep 2013, 16:33 geändert)
Top
 
X
WernerPerplies
Beiträge: 2199
18. Sep 2013, 17:05
Beitrag #2 von 15
Beitrag ID: #517481
Bewertung:
(4914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo Achim,

klar ist das möglich, wenn die Kennziffer klar erkennbar ist, vielleicht sogar durch Suchen und Ersetzen.

Per Skript natürlich auch, wobei man mit einem Skript auch Problemfälle erkennen kann, die eventuell durch die manuelle Nacharbeit entstanden sind.

Der Teufel steckt oft im Detail.

Wi stellst Du Dir denn eine komfortable Lösung vor?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#517472] Top
 
Der Schnitter
Beiträge: 8
19. Sep 2013, 08:27
Beitrag #3 von 15
Beitrag ID: #517494
Bewertung:
(4847 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Guten Morgen!

Suchen und ersetzen könnte funktionieren, allerdings sind die zu findenden Werte variabel.

Das Format ist allerdings immer gleich:
Buchstabe, 4-8 Zahlen, Bindestrich, Buchstabe, 4-8 Zahlen

also X0000-Y1111 bis X00000000-Y00000000

Ein Beispiel: https://dl.dropboxusercontent.com/u/71157568/Beispiel.jpg

Ersetzt werden müssten die Werte durch einen fixen Blanko-Wert, z.B. X0000.

Die zu findenden Tabellen sind eingebettet in größere Tabellen, die wiederum in einem fortlaufenden Textrahmen über die Seiten laufen. (Die tatsächliche Verschachtelung ist noch ein Stück weit verwirrender, ich versuche schon eine ganze Weile das Template WIRKLICH zu verstehen. Aber in groben Zügen müsste das so passen.)

Die Aufgabe lautet also:

Finde im jeweils geöffneten Kapitel alle Tabellen die eine Spalte mit der Kopfzeile "Kennziffer" enthalten.
Finde in dieser Kennzifferspalte alle Werte mit dem Format X0000-Y1111 und ersetze sie durch den fixen Wert X0000.

Die Zeilenzahl variert dabei von Tabelle zu Tabelle, von 1 bis weit über 100. Die zeilen zu zählen macht also vermutlich keinen Sinn, besser ist es, direkt die komplette Spalte zu überschreiben.

Ebenfalls unnötig ist es vermutlich, nach den Variabelen X-000-Y000 zu suchen, denn in der jeweiligen Spalte steht nichts anderes drin als der zu ersetzende Wert.
mann kann die Tabellenzelle also auch gleich KOMPLETT löschen und mit X000 überschreiben.


So viel zu Theorie :-)

Grüße,

Achim
als Antwort auf: [#517481]
(Dieser Beitrag wurde von Der Schnitter am 19. Sep 2013, 08:38 geändert)
Top
 
Der Schnitter
Beiträge: 8
19. Sep 2013, 08:48
Beitrag #4 von 15
Beitrag ID: #517496
Bewertung:
(4832 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Nachtrag:
Mir ist gerade die Idee gekommen, das ich vielleicht das find/Change-Script so umbasteln kann, das die entsprechenden Variabelen gefunden werden, auch OHNE die einzelnen Tabellenspalten auszuwählen, denn die Kombination X000-Y000 ist SO im Katalog einzigartig. Diese Funktion könnte ich mir mit ein bisschen Nachdenken wahrscheinlich noch zusammen basteln.

Leider musste ich dann feststellen, das in der englischen Ausgabe unseres Kataloges nur der ERSTE Teil der Kennziffer ausgegeben wird, also nur der Einkaufspreis ohne die UVP.
Die Kennziffern haben HIER also das Format X0000 bis X00000000.

Damit kann ich nicht mehr mit globalem Suchen/ersetzen arbeiten, da auch Modellbezeichnungen und Herstellernummern den gleichen Aufbau haben können. Die dürfen natürlich nicht angetastet werden.
Das Script darf also ausschließlich in der Spalte "Kennziffer" (bzw "References" arbeiten.

Und hier bin ich dann leider wieder raus :-S
als Antwort auf: [#517494] Top
 
WernerPerplies
Beiträge: 2199
19. Sep 2013, 09:12
Beitrag #5 von 15
Beitrag ID: #517498
Bewertung:
(4817 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Achim,

versuche mal folgenden Grep:
Code
Suche nach: 
([A-Z,0-9]{5,9}-[A-Z,0-9]{5,9})
Andern in:
X00000

ohne Gewähr, da mir echte Testdaten fehlen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#517494] Top
 
Uwe Laubender S
Beiträge: 4106
19. Sep 2013, 09:14
Beitrag #6 von 15
Beitrag ID: #517499
Bewertung:
(4814 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Guten Morgen, Achim!
Ich habe mir Dein Beispiel mal angeschaut.

Dies ist natürlich nur ein optischer Eindruck.
Davon abgeleitet:

1. Die Bezeichnung "Kennziffer" steht immer in der ersten Zelle der letzten Spalte einer Tabelle.

Das könnte natürlich auch anders sein. Wäre zu prüfen.

2. Alle Werte in der letzten Spalte müssen ersetzt werden durch einen einzigen Wert: "X0000".
Stimmt das?
Oder soll die Struktur der Zahlenwerte erhalten werden?
(Warum?) Und alle Zeichen mit "X", alle Zahlen mit "0" ersetzt werden?

Falls beide Annahmen stimmen, dann könnte man bei nicht-verschachtelten Tabellen (also: keine Tabellen innerhalb von Tabellenzellen!) folgendermaßen vorgehen:

Code
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll; 

app.doScript(newContentsOfKennziffer, ScriptLanguage.JAVASCRIPT, [], UndoModes.ENTIRE_SCRIPT, "Alle Inhalte der Kennzifferspalte auf einen Wert setzen");

function newContentsOfKennziffer(){

var d=app.documents[0];
var myNewContents = "X0000";

var myTables = d.stories.everyItem().tables.everyItem().getElements();

for(var n=0;n<myTables.length;n++){

if(myTables[n].columns[-1].cells[0].texts[0].contents.match(/Kennziffer/)){


var lastColumn = myTables[n].columns[-1];

for(var c=1;c<lastColumn.cells.length;c++){
lastColumn.cells[c].contents = myNewContents;

};

};

};

};


Aber so einfach wird's erfahrungsgemäß wahrscheinlich nicht sein…
Falls Du das Codeschnipsel ausprobieren willst:

1. Scriptsprache ist ExtendScript (JavaScript)
2. Ein "Undo" für alle Änderungen ist eingebaut
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#517494] Top
 
Uwe Laubender S
Beiträge: 4106
19. Sep 2013, 09:16
Beitrag #7 von 15
Beitrag ID: #517500
Bewertung:
(4811 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo, Achim!
Tja. Und schon ist mein Code-Schnipsel hinfällig.
Hatte Deinen Beitrag von gerade eben noch nicht zu Gesicht bekommen.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#517496] Top
 
Der Schnitter
Beiträge: 8
19. Sep 2013, 11:57
Beitrag #8 von 15
Beitrag ID: #517509
Bewertung:
(4720 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


@ Uwe

Danke :-)

Dein Codeschnipsel ist keinesfalls hinfällig, sondern die perfekte und elegante Lösung für 5 von 6 Sprachversionen!
Habe nur die Anzahl der gesuchten Zeichen auf 4-9 erweitern müssen, sonst gab es in meinem Testkapitel komischerweise keine Treffer.

Die sechste ist besagte englische Version.

Dein Code funktioniert auch hier erstklassig, allerdings nur bei etwa 70% des Kataloges, der Rest besteht leider aus verschachtelten Tabellen.

Zunächst ein Mal: Deine Annahme ist richtig, die Kennziffer steht immer in der letzten Spalte der Tabelle, und alle Werte müssen durch X000 ersetzt werden (Wobei X0000 hier nur ein Beispiel ist).

Die verschachtelten Tabellen sehen so aus:
Eine Tabelle in oben beschriebenem Format ZWEI MAL in eine weitere, dreispaltige Tabelle eingebettet ist (Im Katalog-Tool auswählbar als Layoutvariante 2).

Beispiel: https://dl.dropboxusercontent.com/...157568/Beispiel2.jpg

Der Aufbau ist dann:
Spalte 1: Tabelle, Spalte 2: Artikelbild, Spalte 3: Nochmal die Tabelle.
Der doppelte Aufbau ist nötig, damit die Artikelbilder bei gerade oder ungeraden Seiten jeweils links oder rechts von der Tabelle stehen. Die Tabellen liegen also immer am Innenrand an und ragen über die Seite hinaus. Sichtbar ist also je nach Seite entweder die linke, oder die rechte Tabelle und das Artikelbild.
Daraus folgt, dass die Kennziffern natürlich in BEIDEN Tabellen geändert werden müssen.

Eigentlich bin ich an dieser Stelle vollkommen zufrieden und glücklich, denn 70% Automatik und 30 % manuellem Markieren von Tabellenspalten in Verbindung mit deinem Codeschnipsel spart mir schon einen ganzen Haufen Zeit.

Aber ich möchte ja bei der ganzen Aktion auch etwas lernen ;-)
Deshalb erlaube ich mir hier mal den Versuch, dein Script zu verstehen:


Das Script sucht im offenen Dokument Tabellen.
Wenn es eine findet, wird von einer unbekannten Anzahl an Spalten die letzte ausgewählt (-1). -> Möchte ich die vorletzte Spalte auswählen hätte ich den Wert (-2), für die erste Spalte (0) und für die dritte (3).

Dann geht es weiter zur Kopfzeile (cells 0). -> Auch hier: Dritte Zeile: 2, letzte Zeile -1 ??

Mit .text(0) kann ich nichts anfangen. Habe ich hier die Möglichkeit, Textrahmen in einem Tabellenfeld zu zählen?

Jedenfalls wird in der letzten Spalte, in der ersten Zeile, im ersten Textfeld(??) der Wert /Code Nummer/ gesucht.
Wird der gefunden, wird die letzte Spalte mit der Variable myNewContend gefüllt.
Dabei sorgt
"(var c=1;c<lastColumn.cells.length;c++){"
dafür, das alle Zeilen außer der Ersten angesprochen werden. (Habe das durch ändern der Zahl ausgetestet)

Der nächste Schritt wäre also, die verschachtelten Tabellen anzusprechen.

Das entsprechende Script müsste, für mein Verständnis, dann doch folgende Funktion erfüllen:

- Suche Tabelle.
- Suche erste und letzte Spalte.
- Suche erste Zeile.
- Finde erstes Textfeld?
- Finde Tabelle im Textfeld

Und DANN wird das erste Script aktiv und kann die Kennziffer-Spalte finden und ändern.

Liege ich so weit richtig?

(Hoffe, du beißt jetzt nicht gerade fluchend in die Tischkannte ;-) )
als Antwort auf: [#517500] Top
 
Uwe Laubender S
Beiträge: 4106
19. Sep 2013, 22:56
Beitrag #9 von 15
Beitrag ID: #517549
Bewertung:
(4674 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo, Achim!
Nein, nein. In die Tischkante hab' ich nicht beißen müssen :-)

Also:
ALLE Tabellen in einer InDesign-Datei zu finden, ist etwas komplizierter (oder auch einfach, je nach Sicht- und Herangehensweise).

Dazu muss ich ein wenig ausholen.

Eine Tabelle im normalen Textfluß kann man auch als einen "Character" sehen.
Dieser "Character", also ein formatierbares Zeichen, gehört der Klasse "Texts" an und weist selbst eine Eigenschaft "Texts" auf.

Jeder Textrahmen oder auch jede Tabellenzelle hat ein "Texts"-Objekt. Text auf einem Pfad ebenfalls. Aber das können wir hier vernachlässigen.

Suche ich also mithilfe der Textsuche nach einem Tabellenzeichen, dann werde ich JEDE Tabelle finden können. Egal, ob verschachtelt oder nicht. Auch egal, ob die Tabelle mitsamt Textrahmen in einem MultiStateObject in einem nicht sichtbaren (nicht aktiven) Status versteckt ist.

Hier das volle Script:

Code
//ReplaceContentsOfKennzifferInAllTables.jsx 
//Uwe Laubender

/**
* @@@BUILDINFO@@@ ReplaceContentsOfKennzifferInAllTables.jsx !Version! Thu Sep 19 2013 22:46:06 GMT+0200
*/
//DESCRIPTION:Column "Kennziffer" is always last column of table; String "Kennziffer" is in first cell of last column.

app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

app.doScript(newContentsOfKennzifferAllTables, ScriptLanguage.JAVASCRIPT, [], UndoModes.ENTIRE_SCRIPT, "Alle Inhalte der Kennziffer-Spalte aller Tabellen auf einen Wert setzen");


function newContentsOfKennzifferAllTables(){

//Wie soll der neue Zelleninhalt lauten?
var myNewContents = "X0000";

//Tabellensuche; mal anders angedacht:
//Wir suchen dasjenige Zeichen, das in Texten eine Tabelle repräsentiert.
//Und zwar über die Textsuche, die auch scriptbar ist:

//Die Suchen und Ersetzen-Einstellungen zurücksetzen:
app.findTextPreferences = app.changeTextPreferences = null;

//Unser gesuchter "Character", also dasjenige Sonderzeichen,
//das eine Tabelle im Textfluß repräsentiert ist "<0016>":

//Die Textsuche präparieren:
app.findTextPreferences.findWhat = "<0016>";

//Die Textsuche starten. Der Wirkungsbereich ist die geöffnete Datei:
var tableCharacters = app.documents[0].findText();

//Die Suchen und Ändern-Einstellungen wieder zurücksetzen;
//sie haben ihren Dienst getan und werden nicht mehr benötigt.

app.findTextPreferences = app.changeTextPreferences = null;

//Ein Array-Objekt vorbereiten, das die gefundenen Tabellen aufnehmen soll:
var myTables = new Array();

//Eine Schleife durch alle gefundenen Sonderzeichen, die eine Tabelle repräsentieren:
for(var n=0;n<tableCharacters.length;n++){

//Und hier kommt der Trick!
//das gefundene Zeichen enthält in seinem texts[0]-Objekt GENAU EIN Tabellen-Objekt!

//Der oben definierte Array wird mit dieser Tabelle gefüttert (durch Zuweisung).
//Ginge auch über myTables[n].push(), wäre aber etwas langsamer.

myTables[n] = tableCharacters[n].texts[0].tables[0];

};


//Anschließend kann man über eine for-Schleife jede Tabelle im Array erreichen:
//Hier geht es also so weiter wie im ersten Code-Schnipsel von mir:

for(var n=0;n<myTables.length;n++){

if(myTables[n].columns[-1].cells[0].texts[0].contents.match(/Kennziffer/)){

var lastColumn = myTables[n].columns[-1];

for(var c=1;c<lastColumn.cells.length;c++){

lastColumn.cells[c].contents = myNewContents;

};

};

};

//Das war's.

}; //END of "function newContentsOfKennzifferAllTables()"


Anzumerken wäre noch:

Funktioniert nur zuverlässig, wenn die Tabellen mindestens einmal vollständig in InDesign zu sehen waren. Also bitte NICHT anwenden auf frisch platzierte Tabellen, die sich noch (teilweise) im Textüberlauf befinden!

Textüberlauf in einzelnen Zellen sollte kein Problem darstellen. Wäre aber besser diesen vorab zu beseitigen.

Anmerkungen zu Deinen anderen Fragen oder Vermutungen morgen.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#517509] Top
 
Der Schnitter
Beiträge: 8
20. Sep 2013, 09:42
Beitrag #10 von 15
Beitrag ID: #517563
Bewertung:
(4632 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

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)
Top
 
WernerPerplies
Beiträge: 2199
20. Sep 2013, 10:33
Beitrag #11 von 15
Beitrag ID: #517565
Bewertung:
(4616 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo Achim,

ich bin schwer beindruckt, Du hast Dir richtig Gedanken gemacht.

Zitat 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.

Das kannst Du Dir direkt am lebenden Objekt anschauen:
ESTK öffnen, mit InDesign verbinden (DDL, oben links), dann Fenster, Datenbrowser, im Datenbrowser: app suchen und aufklappen...

Die intern von Adobe mitgelieferte Beschreibung findest Du z. B. bei Jongware und im Objectmodell-Viewer im ESTK.
Weitere Infos findest Du z. B. auch bei mir:
Bücher und Infos

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#517563] Top
 
Der Schnitter
Beiträge: 8
20. Sep 2013, 10:46
Beitrag #12 von 15
Beitrag ID: #517566
Bewertung:
(4612 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo Werner,

Gedanken machen ist doch die Grundvoraussetzug, wenn ich was lernen will ;-)

Ich habe mir vor längerer Zeit das Buch "InDesign automatisieren" gekauft, aufgeschlagen die Augen verdreht und es wieder zugemacht. Aber da ich mittlerweile ein paar fertige Scripte ausprobiert habe merke ich, wie viel Spaß sowas machen kann und wie wichtig es ist, diesen Kauderwelsch zu beherrschen, wenn ich in 3, 4 Jahren meinen beruf immer noch ausüben will.
Also muß ich verstehen wie das System funktioniert.

Und auch, wenn sich meine Erklärungsversuche vielleicht komisch lesen, es funktioniert bei mir am besten, wenn ich versuche komplexe Zusammenhänge in einen einfacher verständlichen Kontext zu übertragen. Deshalb der Hütchenspieler. Wenn ich es schaffe einen Sachverhalt so zu interpretieren, das ich ihn einem Kind erklären kann, dann habe ich ihn auch selbst verstanden.

Hat den Vorteil, daß derjenige, der MIR die Sache erklärt auch direkt merkt ob ich auf dem Holzweg bin oder wichtige Details vergessen habe (Oder er denkt ich hätte nicht mehr alle Latten am Zaun :-D)

Und mal ehrlich, wenn ich das ganze konstruktive Feedback, das ich hier bei einem einzigen Posting bekomme, einfach gedankelos übernehmen würde.... das wäre nicht nur undankbar, es wäre eine Schande! :-)
als Antwort auf: [#517565]
(Dieser Beitrag wurde von Der Schnitter am 20. Sep 2013, 10:49 geändert)
Top
 
WernerPerplies
Beiträge: 2199
20. Sep 2013, 10:58
Beitrag #13 von 15
Beitrag ID: #517567
Bewertung:
(4606 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo Achim,

Zitat Gedanken machen ist doch die Grundvoraussetzug, wenn ich was lernen will ;-)


Ja, so sollte es sein. ;-)

Zitat Und auch, wenn sich meine Erklärungsversuche vielleicht komisch lesen, es funktioniert bei mir am besten, wenn ich versuche komplexe Zusammenhänge in einen einfacher verständlichen Kontext zu übertragen. Deshalb der Hütchenspieler.


Dann solltest Du Dir gleich noch ein Modell vornehmen, den altmodischen Karteikasten in einer Bibliothek:

Denn wenn Du dir den Applikationszweig im Browser ansiehst und dort zum Beispiel die Eigenschaft Document findest, so steht da nicht das Buch, sondern in der Regel nur eine Karteikarte (Zeiger), die dann zum eigentlichen Buch (Objekt) führt.

Ein Objekt ist dabei meistens wieder nur eine Sammlung von benannten Karteikarten (Zeigern).

Alles klar?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#517566] Top
 
Uwe Laubender S
Beiträge: 4106
20. Sep 2013, 13:07
Beitrag #14 von 15
Beitrag ID: #517578
Bewertung:
(4557 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


Hallo, Achim!

Du schreibst:
Zitat von Achim Das funktioniert deshalb, weil eine Tabelle IMMER in einem Textrahmen steht, und deshalb immer als CHaracter 0016 gefunden werden kann.


Äh. Nicht ganz. Also:

Das funktioniert, weil eine Tabelle von einem (formatierbaren) Zeichen repräsentiert wird.
Und das kann stehen wo Adobe es zulässt: Textrahmen, Text auf Pfad, Tabellenzelle. Hab' ich 'was vergessen?

Hinzu kommt:
Die InDesign-Textsuche (GREP-Suche auch) ist ziemlich mächtig.

Die Text-Suche ist also in der Lage ein noch so tief verschachteltes Zeichen aufzuspüren. Ich brauche also als Scripter nicht den DOM-Baum rauf- und runterabsuchen, sondern werde "direkt" fündig.

Das kommt mit einem kleinen Nachteil daher: die Textsuche ist zwar mächtig, aber auch etwas langsam ;-)

Darüber hinaus kann sie über Scripts viel feiner arbeiten als über's normale User Interface.

P.S.
Ähnlich wie Tabellen werden verankerte Objekte übrigens auch von einzelnen Textzeichen repräsentiert. Tabellen sind nicht die einzigen Objekte, die mit der "Character"-Brille betrachtet werden können.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#517563] Top
 
Der Schnitter
Beiträge: 8
20. Sep 2013, 13:23
Beitrag #15 von 15
Beitrag ID: #517581
Bewertung:
(4548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Inhalt von Tabellenspalten in fixen Wert ändern


AH!

Mit "Tabelle im Textrahmen" meinte ich, das die einzelnen Zellen immer durch einen übergeordneten Rahmen zusammen gehalten werden (Der, der sichtbar wird, wenn ich die Tabellengröße verändere).
Dieser Rahmen ist dann also mit dem Zeichen "Tabelle" formatiert und enthält die Bausteine für die eigentliche Tabelle. In einem Rahmen mit dieser Formatierung ist IMMER eine Tabelle.

Und in einem Rahmen mit der Formatierung "Bild" ist immer ein Bild.

Und auch ein Zeichen für verankerten Text ist nur ein leerer Raum, der mit Inhalt X gefüllt ist.

Um das ganze nochmal in einen Vergleich zu prügeln:

Ein Zeichen "Dose Bohnen" ist immer und eindeutig dafür gedacht Bohnen zu enthalten, "Dose Tomaten" enthält immer und eindeutig Tomaten.

Wie viele, oder welche Bohnen in der Dose sind spielt dabei erstmal keine Rolle. Die Dose könnte sogar leer sein, sprich, in diesem Rahmen "Tabelle" könnte ich alle Zellen löschen, aber der Rahmen selbst müsste trotzdem noch gefunden werden, weil er ja immer noch das Zeichen "Tabelle" hat.

Richtig?

(Schönes Gefühl, wenn sich in meinem verwirrten Kopp so langsam der Groschen durch den Zement frisst... So habe ich bei jedem Lesen das Gefühl der Erkenntnis wieder ein Stück näher zu kommen. Ich sage es nochmal: Eine beratung wie hier in diesem Forum ist echt ungewöhnlich. Ich finde es großartig!)
als Antwort auf: [#517578] Top
 
X