Skip to main content
Participant
September 18, 2015
Question

Zellenbreite in Tabelle anpassen

  • September 18, 2015
  • 1 reply
  • 718 views

Hallo im Forum, bin neu hier und leider auch kein Scripter, aber begeisterter Anwender.

Ich suche nach einem Script, das alle Spalten einer ausgewählten Tabelle durchläuft.

Das sollte doch hinreichend schnell gehen, da mir die Aussage, dass Scripte, die alle Zellen durchlaufen, unendlich langsam seien, noch im Ohr klingt.

Gäbe es da eines, das ich mir ansehen, dabei lernen und anpassen kann?

JS oder VB wäre egal.

Gruß Klaus

This topic has been closed for replies.

1 reply

Community Expert
September 18, 2015

Hallo Klaus,

was das Scripten von InDesign mit ExtendScript angeht, solltest Du Dir vielleicht Gerald Singelmanns Videogrundkurs reinziehen.

Ob JS oder VB ? Ich würde mich auf ExtendScript (JavaScript) stürzen, denn das ist auf Macs wie PCs lauffähig.

Nun zu Deinem Problem.

Ein Script, das die Breiten der Tabellenspalten "anpasst".

"Anpasst" an welche Werte?

Hier ein ExtendScript-Beispiel, das einer ausgewählten Tabelle für jede Tabellenspalte genau einen Wert zuweist:

app.selection[0].columns.everyItem().width = "20 mm";

Das kann funktionieren, muss aber nicht.

Tabellen sind manchmal etwas störrisch.

Was aber sicher funktioniert ist eine Schleife durch alle Tabellenspalten der ausgewählten Tabelle und die Zuweisung eines Wertes für die Breite jeder einzelnen Spalte:

for(var n=0;n<app.selection[0].columns.length;n++)

{

    app.selection[0].columns.width = "20 mm";

};

Beide Skripte setzen voraus, dass auch wirklich die Tabelle ausgewählt ist.

Also nicht eine Tabellenzelle.

Auch nicht der Textrahmen, der die Tabelle enthält oder sonst irgendetwas anderes.

Ist die Tabelle nicht ausgewählt, wirst Du eine Fehlermeldung ernten.

Falls Du noch nichts über die Syntax von JavaScript weisst, solltest Du Dich parallel zum Pröbeln mit ExtendScript dazu schlau machen.

Wie ist die Punktnotation zu benutzen? Was sind Schleifen, was Methoden, was Funktionen, was sind Eigenschaften und Werte, was sind Objekte, wie sind verschiedene Arten von Daten zu unterscheiden? Wie ist das in ExtendScript umgesetzt. Was sind da die Eigenheiten? Sammlungen (Collections) vs. Arrays etc.pp.

Uwe

Participant
September 23, 2015

Hallo Uwe, danke sehr für Deine Hilfe.

Im HDS-Forum ist mir ein Script von G. Singelmann empfohlen worden, das die Spaltenbreite für jede Spalte der Tabelle einstellt.

Das war genau das, was ich suchte, denn die Einstellung war speicherbar und für die nächste gleichartige Tabelle  wieder aufrufbar.

Das funktioniert leider nicht für das nächste Dokument, denn der Speicherort ist [Kein Tabellenformat] und das bekomme ich nicht in das nächste Dokument geladen.

Also wollte ich dafür deine Scriptempfehlung verwenden und scheitere - natürlich - als Laie.

Ich habe Deine Schleife im ESTK ins Laufen gebracht und wollte jetzt variable Spaltenbreiten über ein Array verwenden:

var mycol = [ '27 mm', '4,5 mm', '4,5 mm', '9 mm', '7,5 mm', '6 mm', '1,5 mm',  '7,5 mm', '1,5 mm',  '7,5 mm', '1,5 mm',  '7,5 mm', '1,5 mm', '1,5 mm' ]

for(var n=0;n<app.selection[0].columns.length;n++) 

    app.selection[0].columns.width = mycol

}; 

Das variable Ersetzen scheitert an der Fehlermeldung, dass das nicht der erforderliche (Daten-)Typ sei.

Kannst Du mir bitte noch mal auf die Sprünge helfen?

Gruß Klaus

Community Expert
September 25, 2015

Hallo Klaus,

ohne jetzt genauer zu schauen, aber Du solltest Dir wirklich die Grundlagen von JavaScript (ExtendScript) aneignen.

Werte wie 4,5 werden als 4.5 geschrieben (englische Schreibweise). Die Schreibweise von Kommazahlen wird nicht lokalisiert, auch wenn Du mit einer deutschen Version arbeitest.
Falls Du Dein InDesign mit der Einstellung "Millimeter" betreibst, kannst Du auch ohne Strings im Array arbeiten. Nur mit reinen Zahlen.

Meine Zeit ist gerade sehr knapp. Das nur als Hinweis.

Uwe