[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Tabelle: Spaltenbreiten auf alle Tabellen anwenden

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

Bearny
Beiträge gesamt: 6

21. Mär 2012, 16:21
Beitrag # 1 von 7
Bewertung:
(3967 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich habe folgende zwei Scipte, mit dem Ersten liest man die Spaltenbreiten einer Tabelle ein, welche dann in einem Textfile gesichert werden:

Code
//DESCRIPTION: Nach Markierung einer kompletten Tabelle werden die Spaltenbreiten ermittelt und in eine txt-Datei geschrieben. Autor: Karsten Geisler; Kommentare erbeten! [email protected] 

var dieSelektion = app.selection[0];
dieSelektion;

if (dieSelektion == undefined || dieSelektion.constructor.name != 'Table' ) {
alert('Keine Tabelle ausgewählt\rBitte wählen Sie mit dem Textwerkzeug eine komplette Tabelle aus und starten das Script erneut.');
exit();
}
else if ( dieSelektion.constructor.name == 'Table') {

var anzahlKolumnen = dieSelektion.columns.count();
var kolumnennummer = 0;
var kolumnenbreite = dieSelektion.columns[kolumnennummer].width;
var aSpaltenbreiten = new Array ();

for ( kolumnennummer = 0; kolumnennummer < anzahlKolumnen; kolumnennummer ++ ) {
aSpaltenbreiten.push(dieSelektion.columns[kolumnennummer].width);
}
var anzahlArrayElemente = aSpaltenbreiten.length;
alert ('Mitteilung\rDie markierte Tabelle hat ' + anzahlArrayElemente + ' Spalten. Bitte wählen Sie eine andere Tabelle aus und starten das Sciript »TabellenSpaltenbreiten_B_Einfuegen.jsx«');
}

//Arraydaten werden in eine neue Textdatei geschrieben
var dasIDDokument = app.documents[0];
var derDokPfad = dasIDDokument.filePath + "/" + dasIDDokument.name.split(".indd")[0] + '.txt';
var dasTextDok = new File (derDokPfad);
dasTextDok.open('w', "TEXT", "R*ch");
dasTextDok.writeln(aSpaltenbreiten);



Mit dem Zweiten kann man dann diese Spaltenbreiten auf eine andere Tabelle übertragen:

Code
//DESCRIPTION: Die Spaltenbreiten werden aus der txt-Datei gelesen und auf eine zweite Tabelle angewendet. Autor: Karsten Geisler; Kommentare erbeten! [email protected] 

//Auslesen der Daten aus dem Textdokument
var dasIDDokument = app.documents[0];

var derDokPfad = dasIDDokument.filePath + "/" + dasIDDokument.name.split(".indd")[0] + '.txt';

var dasTextDok = File (derDokPfad);
dasTextDok.open();
var kolumnenBreiten = dasTextDok.read();

var akolumnenBreitenListe = kolumnenBreiten.split(",");
var kolumnenAnzahlTabelle1 = akolumnenBreitenListe.length;
var dieTabelle2 = app.selection[0];

if (dieTabelle2 == undefined || dieTabelle2.constructor.name != 'Table' ) {
alert('Keine Tabelle ausgewählt\rBitte wählen Sie mit dem Textwerkzeug eine Tabelle aus und starten das Script erneut.');
exit();
}

else if ( dieTabelle2.constructor.name == 'Table') {

var anzahlKolumnen = dieTabelle2.columns.count();
var kolumnenAnzahlMin = Math.min(kolumnenAnzahlTabelle1,anzahlKolumnen)

if (kolumnenAnzahlTabelle1 < anzahlKolumnen) {
alert('Spaltenanzahl stimmt nicht überein\rSie haben nun eine Tabelle gewählt, die mehr Spalten als die zuvor gewählte Tabelle hat. Es werden links nur die ersten ' + kolumnenAnzahlTabelle1 + ' Spaltenbreiten geändert.');
}
else if (kolumnenAnzahlTabelle1 > anzahlKolumnen) {
alert('Spaltenanzahl stimmt nicht überein\rSie haben nun eine Tabelle gewählt, die weniger Spalten als die zuvor gewählte Tabelle hat. Statt ' + kolumnenAnzahlTabelle1 + ' werden ' + anzahlKolumnen + ' in der Breite geändert.');
}

var kolumnennummer = 0;

for (kolumnennummer = 0; kolumnennummer < kolumnenAnzahlMin; kolumnennummer ++ ) {
var breiteAktuelleKolumne = akolumnenBreitenListe[kolumnennummer];
dieTabelle2.columns[kolumnennummer].width = akolumnenBreitenListe[kolumnennummer]*1;
}
}

dasTextDok.close();



Mein Problem dabei ist, das ich in einem Dokument ca. 200 Tabellen hab, die ich damit einzelnt anpassen muss. Vielleicht findet jemand eine Möglichkeit, das Zweite-Scipt so zu verändern, dass es auf alle Tabellen automatisch angewendet wird.

MfG
Bearny
X

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

Karsten Geisler
Beiträge gesamt:

22. Mär 2012, 09:53
Beitrag # 2 von 7
Beitrag ID: #492243
Bewertung:
(3917 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Bearny!

Hättest mich auch direkt fragen können ;-)

Egal: sollte kein Problem sein, die ausgelesenen Spaltenbreiten auf alle Tabellen anzuwenden. Frage wäre: geht es wirklich um ausnahmslos alle Tabellen eines Dokuments? Und haben die Tabellen alle die selbe Spaltenanzahl? Oder könnte es z.B. Sinn machen, nur Tabellen anzusprechen, denen ein bestimmtes Tabellenformat zugewiesen wurde?

Viele Grüße
Karsten


als Antwort auf: [#492193]

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

Bearny
Beiträge gesamt: 6

22. Mär 2012, 12:05
Beitrag # 3 von 7
Beitrag ID: #492253
Bewertung:
(3894 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Servus Karsten,

sorry, das nächstes Mal wende ich mich gleich an dich!

Antwort auf: Frage wäre: geht es wirklich um ausnahmslos alle Tabellen eines Dokuments? Und haben die Tabellen alle die selbe Spaltenanzahl? Oder könnte es z.B. Sinn machen, nur Tabellen anzusprechen, denen ein bestimmtes Tabellenformat zugewiesen wurde?


Es würde mir schon viel helfen, wenn es auf alle Tabellen angewendet werden kann! Wenn es aber die Möglichkeit gibt, dieses nur auf ein bestimmtes Tabellenformat anzuwenden, wäre das noch besser.

Vielen Dank schonmal!

MfG
Bearny


als Antwort auf: [#492243]

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

Karsten Geisler
Beiträge gesamt:

22. Mär 2012, 21:30
Beitrag # 4 von 7
Beitrag ID: #492283
Bewertung:
(3855 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bearny!

Probier mal statt des bisherigen zweiten Skripts dieses hier. Du brauchst nur die drei XXX in der sechsten Zeile des Skripts durch den Namen des Tabellenformats ersetzen, bei dem das Skript greifen soll. Alle anderen Tabellen bleiben dann unberührt.

Code
//DESCRIPTION: Die Spaltenbreiten werden aus der txt-Datei gelesen und alle Tabellen, die mit einem bestimmten Tabellenformat formatiert wurden, angewendet. Autor: Karsten Geisler; Kommentare erbeten! [email protected] 
//2012-03-22
#target InDesign

//Auslesen der Daten aus dem Textdokument
var tabellenFormat = "XXX";
var dasIDDokument = app.activeDocument;

var derDokPfad = dasIDDokument.filePath + "/" + dasIDDokument.name.split(".indd")[0] + '.txt';

var alleObjekte = dasIDDokument.stories.everyItem().getElements();

var dasTextDok = File (derDokPfad);
dasTextDok.open();
var kolumnenBreiten = dasTextDok.read();

var akolumnenBreitenListe = kolumnenBreiten.split(",");
var kolumnenAnzahlTabelle1 = akolumnenBreitenListe.length;


for (var i = 0; i < alleObjekte.length; i++) {
for (var k = 0; k < alleObjekte[i].tables.length; k++) {
if (alleObjekte[i].tables[k].appliedTableStyle.name == tabellenFormat) {
var dieseTabelle = alleObjekte[i].tables[k];

var anzahlKolumnen = dieseTabelle.columns.count();
var kolumnenAnzahlMin = Math.min(kolumnenAnzahlTabelle1,anzahlKolumnen)

if (kolumnenAnzahlTabelle1 < anzahlKolumnen) {
alert('Spaltenanzahl stimmt nicht überein\rSie haben nun eine Tabelle gewählt, die mehr Spalten als die zuvor gewählte Tabelle hat. Es werden links nur die ersten ' + kolumnenAnzahlTabelle1 + ' Spaltenbreiten geändert.');
}
else if (kolumnenAnzahlTabelle1 > anzahlKolumnen) {
alert('Spaltenanzahl stimmt nicht überein\rSie haben nun eine Tabelle gewählt, die weniger Spalten als die zuvor gewählte Tabelle hat. Statt ' + kolumnenAnzahlTabelle1 + ' werden ' + anzahlKolumnen + ' in der Breite geändert.');
}

var kolumnennummer = 0;

for (kolumnennummer = 0; kolumnennummer < kolumnenAnzahlMin; kolumnennummer ++ ) {
var breiteAktuelleKolumne = akolumnenBreitenListe[kolumnennummer];
dieseTabelle.columns[kolumnennummer].width = akolumnenBreitenListe[kolumnennummer]*1;
}
}
}
}

dasTextDok.close();


Bin gespannt!
Viele Grüße
Karsten


als Antwort auf: [#492253]

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

Karsten Geisler
Beiträge gesamt:

30. Mär 2012, 16:01
Beitrag # 5 von 7
Beitrag ID: #492780
Bewertung:
(3741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe mich noch mal an die oben geposteten Skripte gemacht und aus den ursprünglich zweien ein Skript gemacht.

Das Vorgehen für das folgende Skript sieht so aus, dass
– erst eine Tabelle markiert wird, aus der die Spaltenbreiten übernommen werden sollen
– dann Skript laufen lassen
– und dabei das Tabellenformat wählen, auf das dokumentweit die Spaltenbreiten aus der ersten Tabelle angewendet werden sollen (Tabellen, die nicht mit dem gewählten Tabellenformat formatiert wurden, bleiben vom Skript unberührt)

Code
//DESCRIPTION: Spaltenbreiten werden von einer markierten Tabelle ausgelesen und auf alle Tabellen, die mit einem bestimmten Tabellenformat formatiert wurden, angewendet. Autor: Karsten Geisler; Kommentare erbeten! [email protected] 
//2012-03-30
#target InDesign

var dasIDDokument = app.activeDocument;
var alleObjekte = dasIDDokument.stories.everyItem().getElements();
var dieSelektion = app.selection[0];

//Spaltenbreiten der gewählten Tabellen werden in die Variable aSpaltenbreiten geschrieben
if (dieSelektion == undefined || dieSelektion.constructor.name != 'Table' ) {
alert('Keine Tabelle ausgewählt\rBitte mit dem Textwerkzeug eine komplette Tabelle auswählen und das Script erneut starten.');
exit();
}
else if ( dieSelektion.constructor.name == 'Table') {
var anzahlKolumnenTab1 = dieSelektion.columns.count();
var kolumnennummerTab1= 0;
var aSpaltenbreitenTab1 = new Array ();
for (var kolumnennummerTab1 = 0; kolumnennummerTab1 < anzahlKolumnenTab1; kolumnennummerTab1 ++ ) {
aSpaltenbreitenTab1.push(dieSelektion.columns[kolumnennummerTab1].width);
}
}

//Dialog, damit User das gewünschte Tabellenformat auswählen kann, auf das die augenommenen Spaltenbreiten angewendet werden
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
var dialog = app.dialogs.add();
dialog.name = "Tabellenformat der Auswahl zuweisen";
var dialogCol = dialog.dialogColumns.add();
var dialogText = dialogCol.staticTexts.add();
dialogText = "Wählen Sie ein Tabellenformat aus:";
var dropDownListe = dialogCol.dropdowns.add();
dropDownListe.stringList = app.activeDocument.tableStyles.everyItem().name;
var zeigeDialog = dialog.show();
if (zeigeDialog && dropDownListe.selectedIndex > -1 && app.selection.length == 1) {
var ausgewaehltesTabellenFormat = app.activeDocument.tableStyles[dropDownListe.selectedIndex].name;
}
dialog.destroy();

//Spaltenbreiten werden übertragen
for (var i = 0; i < alleObjekte.length; i++) {
for (var k = 0; k < alleObjekte[i].tables.length; k++) {
if (alleObjekte[i].tables[k].appliedTableStyle.name == ausgewaehltesTabellenFormat) {
var tab2 = alleObjekte[i].tables[k];
var anzahlKolumnenTab2 = tab2.columns.count();
var kolumnenAnzahlMin = Math.min(anzahlKolumnenTab1,anzahlKolumnenTab2) ;
var kolumnennummer = 0;
for (kolumnennummer = 0; kolumnennummer < kolumnenAnzahlMin; kolumnennummer ++ ) {
tab2.columns[kolumnennummer].width = aSpaltenbreitenTab1[kolumnennummer]*1;
}
}
}
}


Viele Grüße
Karsten

PS: 1000 Dank an Gregor für sein super Buch ;-)


als Antwort auf: [#492283]

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

barsch1969
Beiträge gesamt: 51

31. Mär 2012, 16:01
Beitrag # 6 von 7
Beitrag ID: #492808
Bewertung:
(3684 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Grandioses Skript!


als Antwort auf: [#492780]

Tabelle: Spaltenbreiten auf alle Tabellen anwenden

Karsten Geisler
Beiträge gesamt:

31. Mär 2012, 16:24
Beitrag # 7 von 7
Beitrag ID: #492810
Bewertung:
(3676 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi barsch1969!

Freut mich, wenn’s gefällt ;-)

Viele Grüße
Karsten


als Antwort auf: [#492808]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
09.09.2021 - 17.12.2021

Digicomp Academy, Zürich
Donnerstag, 09. Sept. 2021, 13.00 Uhr - Freitag, 17. Dez. 2021, 19.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von Publishing NETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen.

Preis: 6'300.– zzgl. 7.7% MWST
Dauer: 18 Tage(ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberater AT digicomp DOT ch