#target InDesign //DESCRIPTION: Tabelle invertieren /* + Indesign Version: 7.5.2 + Autor: Roland Dreger + Datum: 17. Dezember 2011 */ app.scriptPreferences.enableRedraw = false; if (app.scriptPreferences.version >= 6) { app.doScript(upsideDown, ScriptLanguage.JAVASCRIPT , [], UndoModes.ENTIRE_SCRIPT, "Tabelle invertieren"); } else { upsideDown(); } function upsideDown () { var _dok = app.activeDocument; var _table; var _newTable; var _oldTable; if ((app.selection.length > 0) && (_dok.selection[0].constructor.name == "Table")) { _table = _dok.selection[0]; var _tableName = _table.name; _table.name = "_master_copy_"; var _firstFooterRow = _table.rows.length - _table.footerRowCount; // Tabellenkopf- und -fusszeilen entfernen (ja/nein) var _headOrFootYesNo = _delHeadAndFoot (_table, _firstFooterRow); // duplizieren der Tabelle var _dupTableTF = _table.parent.duplicate (); _dupTableTF.tables.itemByName("_master_copy_").name = "_copy_"; var _bodyColumnLength = _table.columns.length; var _firstBodyColumn = 0; var _lastBodyColumn = _bodyColumnLength - 1; var _bodyRowLength = _table.bodyRowCount; var _firstBodyRow = _table.headerRowCount; var _lastBodyRow = _bodyRowLength + _table.headerRowCount - 1; var _newBodyColumnLength = _bodyRowLength; var _newBodyRowLength = _bodyColumnLength; // Zeilen mit Spalten tauschen if (_bodyRowLength != _bodyColumnLength) { // weniger Zeilen als Spalten if (_bodyRowLength < _bodyColumnLength) { for (var i = 0; i < (_bodyColumnLength - _bodyRowLength); i++) { _table.columns.lastItem().remove(); } for (var i = 0; i < (_bodyColumnLength - _bodyRowLength) ; i++) { _table.rows.add(LocationOptions.AFTER,_table.rows[_firstBodyRow]); } // mehr Zeilen als Spalten } else { _table.rows.itemByRange(_bodyColumnLength+_firstBodyRow,_bodyRowLength+_firstBodyRow-1).remove(); for (var i = 0; i < (_bodyRowLength - _bodyColumnLength) ; i++) { _table.columns.add(LocationOptions.BEFORE,_table.columns[-1]); } } } // Zellen einlesen _oldTable = _dok.textFrames.everyItem().tables.itemByName("_copy_").getElements()[0]; var _bodyCell; var _bodyCellContents = []; var _bodyCellStyles = []; for (var c = _firstBodyColumn; c <= _lastBodyColumn; c++) { for (var r =_firstBodyRow; r <= _lastBodyRow; r++) { _bodyCell = _oldTable.cells.item(c + ":" + r).getElements()[0]; _bodyCellContents.push(_bodyCell.texts[0]); _bodyCellStyles.push(_bodyCell.appliedCellStyle); } } // Zelleninhalt neu einsetzen, Formatierung uebertragen _newTable = _dok.textFrames.everyItem().tables.itemByName("_master_copy_").getElements()[0]; if ((_headOrFootYesNo == true ) && (_oldTable.columns.length > _newTable.columns.length) && (_oldTable.headerRowCount > 0 || _oldTable.footerRowCount > 0)) { var _reply2 = confirm ("Die Kopf- oder Fußzeile(n) der transformierten Tabelle enthalten weniger Spalten als die der ursprünglichen Tabelle. Datenverlust in Kopf- und Fußzeile(n) ist möglich. \n Trotzdem fortfahren?", "", "Vorsicht!"); if (_reply2) { transferCells (_dok, _oldTable, _newBodyColumnLength, _newBodyRowLength, _firstBodyRow, _firstBodyColumn, _newTable, _bodyCellStyles, _bodyCellContents); cleanDok (_newTable, _oldTable, _tableName); } else { _newTable.parent.remove(); _oldTable.name = _tableName; // urspruenglicher Namen der Tabelle wird wieder einsetzen } } else { transferCells (_dok, _oldTable, _newBodyColumnLength, _newBodyRowLength, _firstBodyRow, _firstBodyColumn, _newTable, _bodyCellStyles, _bodyCellContents); cleanDok (_newTable, _oldTable, _tableName); } } else { alert("Bitte eine Tabelle auswählen."); } } function _delHeadAndFoot (_table, _firstFooterRow) { if ((_table.headerRowCount > 0) || (_table.footerRowCount > 0)) { var _reply = confirm("Kopf- und Fußzeilen der Tabelle erhalten?"); if (_reply == false) { // Kopfzeilen in Tabellenkoerperzellen umwandeln for (var h = _table.headerRowCount-1; h >= 0 ; h--) { if (String(_table.rows.item(h).rowType) == "HEADER_ROW") { _table.rows.item(h).rowType = RowTypes.BODY_ROW; } } // Fusszeilen in Tabellenkoerperzellen umwandeln for (var f = _firstFooterRow; f < _table.rows.length; f++) { if (String(_table.rows.item(f).rowType) == "FOOTER_ROW") { _table.rows.item(f).rowType = RowTypes.BODY_ROW; } } } } else { _reply = false; } return _reply; } function transferCells (_dok, _oldTable, _newBodyColumnLength, _newBodyRowLength, _firstBodyRow, _firstBodyColumn, _newTable, _bodyCellStyles, _bodyCellContents) { var _newLastBodyColumn = _newBodyColumnLength -1; var _newLastBodyRow = _newBodyRowLength + _oldTable.headerRowCount - 1; var _newBodyCell; var _oldBodyCell; var _bci = 0; for (var r =_firstBodyRow; r <= _newLastBodyRow; r++) { for (var c = _firstBodyColumn; c <= _newLastBodyColumn; c++) { _newBodyCell = _newTable.cells.item(c + ":" + r); // Zellenformat uebertragen _newBodyCell.appliedCellStyle = _bodyCellStyles[_bci]; // Zelleninhalt zuruecksetzen _newBodyCell.contents = ""; // Zelleninhalt uebertragen _bodyCellContents[_bci].duplicate(LocationOptions.AFTER,_newBodyCell.insertionPoints[0]); // Loescht die Ueberschreibungen am Zellenformat _newBodyCell.clearCellStyleOverrides(); _bci = _bci + 1; } } } // Dokument bereinigen function cleanDok (_newTable, _oldTable,_tableName) { app.activeDocument.select(NothingEnum.nothing); _newTable.name = _tableName; // urspruenglicher Namen der Tabelle wird wieder einsetzen _oldTable.parent.remove(); }