[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Tabellenzeilen als einzelne Textrahmen

Hans Haesler
  
Beiträge gesamt: 5826

14. Sep 2018, 13:30
Bewertung:

gelesen: 3071

Beitrag als Lesezeichen
Hallo Faxinger,

Dein Wunsch ist mein Befehl :-).

Code
//ZeilenZuRahmen_602d.js 
//© 14.09.2018 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
//DESCRIPTION:Tabellenzeilen in Textrahmen umwandeln

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// das aktuelle Dokument
var curDoc = app.documents[0];

// die Auswahl speichern und prüfen
curSel = app.selection;

if (curSel.length == 0) {
alert ("Einen Textrahmen auswählen.", "Achtung");
exit();
}

var curType = curSel[0].constructor.name;

if (curType == "TextFrame") {
var targetFrame = curSel[0];
}
else {
if (curSel[0].hasOwnProperty("baseline")) {
targetFrame = curSel[0].parentTextFrames[0];
}
else {
alert ("Einen Textrahmen auswählen.", "Achtung");
exit();
}
}

// die im Rahmen enthalte(n) Tabelle(n)
var allTables = targetFrame.tables;
var nTables = allTables.length;

// die Suchen/Ersetzen-Preferences löschen
app.findTextPreferences = app.changeTextPreferences = null;
// Suchen/Ersetzen-Strings
app.findTextPreferences.findWhat = "\r";
app.changeTextPreferences.changeTo = "\t";

// eine Schleife durch die Tabellen
for (var t=nTables-1; t>-1; t--) {
var curTable = allTables[t];
var allRows = curTable.rows;
var nRows = allRows.length;

// in jeder Reihe die Zellen vereinen
for (var r=nRows-1; r>-1; r--) {
allRows[r].cells[0].merge(allRows[r].cells.itemByRange(1,-1));
}

// die Returns durch Tabs ersetzen
curTable.changeText();

// dis absolute Seitennummer
var p = curTable.parent.parentPage.documentOffset;

// alle Zellen
var allCells = curTable.cells;
// eine Schleife durch die Zellen
for (var c=0; c<allCells.length; c++) {
var cH = allCells[c].height; // Höhe
var cW = allCells[c].width; // Breite
var yO = allCells[c].topInset; // Zellversatz oben
var xO = allCells[c].leftInset; // Zellversatz links
// der obere Zellenrand
var y1 = (allCells[c].insertionPoints[0].baseline)-(yO*3)-0.25;
// der linke Zellenrand
var hP = (allCells[c].insertionPoints[0].horizontalOffset)-xO;
var y2 = y1+cH; // der untere Rand
var x2 = hP+cW; // der rechte Rand
// den Textrahmen erzeugen
var curFrame = curDoc.pages[p].textFrames.add({geometricBounds:[y1, hP, y2, x2], strokeColor:"None"});
// der Abstand des Textes zum Rahmen
curFrame.textFramePreferences.insetSpacing = [yO, xO, 0, 0];
// versuchen, den Inhalt der Zelle zu kopieren und einzusetzen
try {
app.select(allCells[c].texts[0]);
app.copy();
app.select(curFrame.insertionPoints[0]);
app.paste();
}
catch (e) {
}
}
}

// die Auswahl aufheben
app.selection = null;

// die Suchen/Ersetzen-Preferences löschen
app.findTextPreferences = app.changeTextPreferences = null;

// das Ende der Aktion verkünden
var dlog = new Window("palette");
dlog.size = [320,100];
dlog.add("statictext", [80, 100, 320, 116], "Fertig.");
dlog.show();
// eine kleine Pause
$.sleep(999);
// das Fenster schliessen
dlog.close();

Entweder den Textrahmen auswählen oder den Cursor in den Textrahmen setzen.

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 14. Sep 2018, 13:40 geändert)
Änderungsverlauf:
Beitrag geändert von Hans Haesler (Veteran) am 14. Sep 2018, 13:40