[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Tabellen in ein anderes Dokument bewegen (CS6, WIn10)

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

Tabellen in ein anderes Dokument bewegen (CS6, WIn10)

cwenet
Beiträge gesamt: 1139

21. Mär 2016, 16:17
Beitrag # 1 von 5
Bewertung:
(1432 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

hiermit versuche ich gerade Tabellen von einem Dokument in ein neues Dokument zu bewegen.
Es sollen alle Tabellen ausgeschnitten werden. Diese werden dann in einem neuen Dokument platziert. Pro Tabelle eine Seite. Nicht verknüpft.
Im Quelldokument soll dann einfach eine fortlaufende Nummer an die ursprüngliche Stelle gesetzt werden:

Code
var myTables = app.activeDocument.stories.everyItem().tables; 

app.documents.add();
var myDocument = app.documents.item(0);


for (var t=myTables.length-1; t>=0; t--){

var myPage =myDocument.pages.add();
var myTextFrame = myPage.textFrames.add();
myTextFrame.geometricBounds = [0, 0, 200, 200];

var myIP = myTables[t].storyOffset;
var myTableContainer = myTables[t].parentStory.characters[myIP.index];

var myMove = myTableContainer.move(LocationOptions.AT_BEGINNING, myTextFrame);
myTableContainer.insertionPoints[0].contents = "TAB_"+t;
}


Ich bekomme die Tabelle nicht zu greifen.

Anbei Testdokumente:
vorher.idml = Quelle
nachher.idml = Ziel
vorher2.idml = Quelle nach Scriptdurchlauf

Bitte um Hilfe
Gruß
Christoph

Anhang:
vorher.idml (38.2 KB)   vorher2.idml (36.1 KB)   nachher.idml (38.6 KB)
X

Tabellen in ein anderes Dokument bewegen (CS6, WIn10)

Uwe Laubender
Beiträge gesamt: 5316

21. Mär 2016, 18:24
Beitrag # 2 von 5
Beitrag ID: #548225
Bewertung:
(1403 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,
ist ein wenig tricky.

Ich versuch's mal so zu erklären:

Das Greifen der beteiligten InDesign-Dateien würde ich beispielsweise so machen:

var sourceDoc = app.documents.itemByID(app.activeDocument.id);
var targetDoc = app.documents.add();

Dann ist die Zuordnung sonnenklar.

Kommen wir zu den Tabellen im sourceDoc :

table kennt kein parentStory.

Also müssen wir es mit dem table.parent oder dem table.parent.parentStory versuchen.

Was der parent einer Tabelle ist, wird davon bestimmt, ob das Zeichen, das die Tabelle in der Story darstellt sich im Übersatz befindet oder nicht.

Bei Übersatz ist table.parent die Story.
Kein Übersatz ist table.parent ein textFrame.

Warum die Schleife rückwärts?
Sollen die Tabellen in umgekehrter Reihenfolge im Ziel erscheinen?
Ich glaube nicht.
Warum sollen die Tabellen von Seite 2 an des Zieldokuments gebaut werden?

Die add()-Methode von document erzeugt immer eine Datei mit genau einer Seite. Du generierst in der Schleife immer erst eine Seite mit einem Textrahmen und bewegst dann erst die Tabelle hinein. Seite 1 bleibt unberührt.

Du könntest beispielsweise zunächst die Anzahl der Tabellen ermitteln und dann erst eine neue Datei erstellen, die die genau richtige Anzahl von Seiten hat. Ist nur ein Vorschlag. Weiter unten im Code nicht verfolgt.

Auch:
Wenn Du anstatt dem move()-Befehl duplicate() verwendest, brauchst Du nicht in umgekehrter Reihenfolge die eingesammelten Tabellen abarbeiten. Löschen kannst Du alle Tabellen im Quelldokument nach getaner Arbeit durch die Schleife in einem Rutsch. Das hat sich in vielen Fällen bewährt.

Hier mal ein Codevorschlag:
Code
// Vorsicht mit der Referenzierung der InDesign-Dateien. 
// Kann so sichergestellt werden:
var mySourceDoc = app.documents.itemByID(app.documents[0].id);
var myTargetDoc = app.documents.add();

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

// Weshalb eine umgekehrte Reihenfolge?
// Sollen die Tabellen in umgekehrter Reihenfolge im Zieldokument landen?
// Lieber die Schleife in "normaler Reihenfolge" laufenlassen
// und anstatt move() duplicate() benutzen:
for (var t = 0; t<myTables.length;t++)
{

// Wir starten mit einem leeren Dokument immer mit genau 1 Seite,
// wenn documents.add() ohne Zusatzparameter angewendet wird.
// pages[-1] ist beim ersten Durchgang die Seite 1 des neuen Dokuments.
var currentPage = myTargetDoc.pages[-1];
var myTextFrame = currentPage.textFrames.add
(
{
geometricBounds : currentPage.bounds
}
);

// Tabellen haben keine parentStory
// parent von table ist ein Textrahmen ODER es ist die Story
// Erst Duplizieren, dann Original löschen hat sich oft bewährt

if(myTables[t].parent.constructor.name == "TextFrame")
{
var myParentStory = myTables[t].parent.parentStory;
}
else
{
var myParentStory = myTables[t].parent;
};

myParentStory.
characters[myTables[t].storyOffset.index].
duplicate
(
LocationOptions.AT_BEGINNING ,
myTextFrame.insertionPoints[0]
);


// Zählung von 1 an, nicht von 0 an:
myTextFrame.insertionPoints[0].contents = "TAB_"+(t+1)+"\r";

// Erst jetzt die neue Seite hinzufügen.
// Ausnahme: Letzter Durchgang der Schleife
if(t<myTables.length-1)
{
myTargetDoc.pages.add();
};

};

// Aufräumen im Original:
mySourceDoc.stories.everyItem().tables.everyItem().remove();


Und Vorsicht beim Erzeugen der geometricBounds in Doppelseitendokumenten. Da kommt's darauf an, wie die Linealeinstellungen sind, ob das wie gewünscht funktioniert.


als Antwort auf: [#548214]

Tabellen in ein anderes Dokument bewegen (CS6, WIn10)

cwenet
Beiträge gesamt: 1139

21. Mär 2016, 20:22
Beitrag # 3 von 5
Beitrag ID: #548233
Bewertung:
(1373 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen lieben Dank Uwe,

für das tolle Script.
Und vor allem für die hervorragenden Erklärungen.
Ich hatte mir das mal angewöhnt, immer alles rückwärts laufen zu lassen.
Aber bei duplicate brauche ich das ja garnicht (Dokument wird nicht verändert). Und die Tabellen stehen im Ziel auch in der richtigen Reihenfolge. Clever, danke.

Grüße und schönen Abend Christoph


als Antwort auf: [#548225]

Tabellen in ein anderes Dokument bewegen (CS6, WIn10)

Uwe Laubender
Beiträge gesamt: 5316

21. Mär 2016, 21:38
Beitrag # 4 von 5
Beitrag ID: #548246
Bewertung:
(1346 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nun ja, was die Reihenfolge der Tabellen angeht, ist diese durch die Collection der Stories im Ausgangsdokument bestimmt. Und die Reihenfolge der Tabellen innerhalb einer individuellen Story.

Ob das eine sinnvolle Reihenfolge darstellt?

Kriterien für eine sinnvollere Reihenfolge gäbe es bestimmt.
Die müssten aber erst mal formuliert werden.
Erst dann wäre das wirklich "rund".


als Antwort auf: [#548233]

Tabellen in ein anderes Dokument bewegen (CS6, WIn10)

cwenet
Beiträge gesamt: 1139

21. Mär 2016, 21:49
Beitrag # 5 von 5
Beitrag ID: #548247
Bewertung:
(1336 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Im Quelldokument habe ich noch zusätzlich den Zähler an der ursprünglichen Tabellenposition ausgegeben.
Somit kann später, wenn die Tabellen im separaten Dokument bearbeitet wurden, die Zuordnung stattfinden.

Grüße Christoph


als Antwort auf: [#548246]
X