[GastForen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Forenindex -- Lesezeichen

14 Lesezeichen für skript

FindChangeList - allgemeine Fragen
Hallo rübi,

Antwort auf: 1. Ist es egal in welcher Codierung die Datei gespeichert wird (Windows Latin, MacOS, Utf 8)?


Ja, denn Adobe-Programme konvertieren 8-bit codierte Dateien nach Unicode:

Zitat von Adobe InDesign CS2 Scripting Reference When doing file I/O, Adobe applications convert 8-bit character encoding to Unicode. By default, this conversion process assumes that the system encoding is used (code page 1252 in Windows or Mac Roman in Mac OS).



Antwort auf: 2. Warum muss ich mindestens eine findChangeOption eingeben damit überhaupt etwas passiert?


FindChangeByList.jsx erwartet pro Zeile 5 Felder:

Zitat von FindChangeList.txt The format of each record in the file is:
findType<tab>findProperties<tab>changeProperties<tab>findChangeOptions<tab>description

Where:
<tab> is a tab character
(1) findType is "text", "grep", or "glyph" (this sets the type of find/change operation to use).
(2) findProperties is a properties record (as text) of the find preferences.
(3) changeProperties is a properties record (as text) of the change preferences.
(4) findChangeOptions is a properties record (as text) of the find/change options.
(5) description is a description of the find/change operation


Du könntest die FindChangeOptions auch ohne Attribute übergeben: {}

Antwort auf: 3. Wie kann ich nach einem Zeichenformat (entweder Helvetica Neue 75 bold oder besser noch nur den Schnitt 75 bold) suchen?
>> appliedFont?? Wie würde die komplette Suche lauten?

text<tab>{fontStyle:"75 Bold"}<tab>{appliedCharacterStyle:"Bold"}<tab>{}<tab>// ersetze Schriftstil '75 bold' durch Zeichenformat 'Bold'

also:
Code
text	{fontStyle:"75 Bold"}	{appliedCharacterStyle:"Bold"}	{}	// ersetze Schriftstil '75 bold' durch Zeichenformat 'Bold' 


Antwort auf: 4. In dem Beispiel in der Datei
(//text {findWhat:"^9^9.^9^9"} {appliedCharacterStyle:"price"} steht kein "change to"
> Ist die dritte Stelle in der Eingabe immer das "change to"? Woher weis man, wann es erforderlich ist und wann nicht??

Das steht in den Instruktionen zur Struktur der Einträge in 'FindChangeList.txt' (s.o.).

Ich habe Übersichten zu den Eigenschaften (properties), nach denen gesucht werden kann und die ersetzt werden können, nebst den möglichen Optionen angehängt (es handelt sich um Auszüge aus der HTML-Umsetzung der Scripting-Reference für CS3: indesigncs3jshelp.zip):

Text-Suche:
01_FindTextPreference.html
02_ChangeTextPreference.html
03_FindChangeTextOption.html

GREP-Suche:
04_FindGrepPreference.html
05_ChangeGrepPreference.html
06_FindChangeGrepOption.html
...
Martin Fischer
22. Mär 2008, 09:07
Fussnoten in InDesign
Hallo zusammen,

Ich habe einen zweispaltigen Text mit Fussnoten in Adobe InDesign CS2, wuerde aber gern die Fussnoten als *eine* fortlaufende Spalte am Ende jeder Seite haben.

Hat jemand eine Idee, wie man das machen koennte?

Recht vielen Dank im Voraus!
Christoph....
Christoph29
12. Aug 2006, 17:07
Neues Fußnotenproblem CS5
Beim Synchronisieren der Einstellungen der Linie bei 'fortgesetzten Fußnoten' mit der Linie über der 'ersten Fußnote in der Spalte' hilft das Skript continuingRule_Sync.jsx.


Ein ganzes Set mit Einstellungen zu den Fußnotenoptionen lässt sich mit dem Skript footnoteOptionsSet.jsx einrichten.
...
Martin Fischer
9. Mär 2011, 09:24
Zeichen zählen
In http://www.adobeforums.com/webx?14@@.3c063846/5 hat Harbs heute ein erweitertes Skript zum Zählen von Zeichen, Wörtern, Zeilen und Absätzen in der Auswahl, dem ausgewählten Textabschnitt oder in allen Textabschnitten veröffentlicht:

Code
//TextCounter 
//An InDesign 3 JavaScript
//
//Counts text objects in the selection, in the selected story, or in all stories in a document.
//
//For more on InDesign scripting, go to http://www.adobe.com/products/indesign/scripting.html
//or visit the InDesign Scripting User to User forum at http://www.adobeforums.com
//
if(app.documents.length != 0){
if(app.activeDocument.stories.length > 0){
myDisplayDialog();
}
else{
alert("The current document does not contain any text.");
}
}
else{
alert("No documents are open. Please open a document and try again.");
}

function myDisplayDialog(){
var myCountButtons, myRangeButtons;
var myDialog = app.dialogs.add({name:"TextCounter"});
with(myDialog.dialogColumns.add()){ with(borderPanels.add()){
staticTexts.add({staticLabel:"Count:"});
with(myCountButtons = radiobuttonGroups.add()){
radiobuttonControls.add({staticLabel:"Characters"});
radiobuttonControls.add({staticLabel:"Words", checkedState:true});
radiobuttonControls.add({staticLabel:"Lines"});
radiobuttonControls.add({staticLabel:"Paragraphs"});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"Range:"});
with(myRangeButtons = radiobuttonGroups.add()){
radiobuttonControls.add({staticLabel:"Selection", checkedState:true});
radiobuttonControls.add({staticLabel:"Selected Story"});
radiobuttonControls.add({staticLabel:"All Stories"});
}
}
}
var myReturn = myDialog.show();
if (myReturn == true){
//Get the values from the dialog box.
var myRangeType = myRangeButtons.selectedButton;
var myCountType = myCountButtons.selectedButton;
myDialog.destroy();
myTextCounter(myRangeType, myCountType);
}
else{
myDialog.destroy();
}
}
function myTextCounter(myRangeType, myCountType){
var myDocument, myTextCount, mySelection, myCountingUnit;
with (myDocument = app.activeDocument){
//Set the AlreadyCounted key of any stories in the document to false.
for (var myStoryCounter = 0; myStoryCounter < myDocument.stories.length; myStoryCounter ++){
myDocument.stories.item(myStoryCounter).insertLabel("AlreadyCounted", "False")
}
switch (myRangeType){
case 0:
//Count the text in the selection.
//If multiple text frames are selected, all of the
//text in the frames will be counted.
mySelection = selection;
if (mySelection.length == 1){
myTextCount = mySelectionSorter(mySelection[0], myRangeType, myCountType); }
else{
myTextCount = 0;
for (var myCounter = 0; myCounter < mySelection.length; myCounter++){
myTextCount = myTextCount + mySelectionSorter(mySelection[myCounter], myRangeType, myCountType);
}
}
break;
case 1:
//Count the text in the parent story (or stories) of the selection)
mySelection = selection;
if (mySelection.length == 1){
myTextCount = mySelectionSorter(mySelection[0], myRangeType, myCountType);
}
else{
myTextCount = 0;
//Now iterate through the items and count the text.
for (var myCounter = 0; myCounter < mySelection.length; myCounter++){
myTextCount = myTextCount + mySelectionSorter(mySelection[myCounter], myRangeType, myCountType);
}
}
break;
case 2:
//Count the text in all stories of the active document.
myTextCount = 0;
for(var myStoryCounter = 0; myStoryCounter < myDocument.stories.length; myStoryCounter ++){
myTextCount = myTextCount + myCountText(myDocument.stories.item(myStoryCounter), myCountType);
}
break;
}
switch(myCountType){
case 0:
if (myTextCount == 1){
myCountingUnit = "character";
}
else {
myCountingUnit = "characters";
}
break;
case 1:
if (myTextCount == 1){
myCountingUnit = "word";
}
else {
myCountingUnit = "words";
}
break;
case 2:
if (myTextCount == 1){
myCountingUnit = "line";
}
else {
myCountingUnit = "lines";
}
break;
case 3:
if (myTextCount == 1){
myCountingUnit = "paragraph";
}
else {
myCountingUnit = "paragraphs";
}
break;
}
var myDialog = app.dialogs.add({name:"TextCounter", canCancel:false});
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
with(borderPanels.add()){
staticTexts.add({staticLabel:"InDesign found "});
with(dialogColumns.add()){
textEditboxes.add({editContents:myTextCount+""});
}
with(dialogColumns.add()){
staticTexts.add({staticLabel:myCountingUnit});
}
}
}
}
myDialog.show();
myDialog.destroy();
}
}
function mySelectionSorter(myObject, myRangeType, myCountType){
var myTextCount;
switch (myObject.constructor.name){
case "Text":
case "InsertionPoint":
switch (myRangeType){
case 0:
myTextCount = myCountText(myObject, myCountType);
break;
case 1:
myTextCount = myCountText(myObject.parentStory, myCountType);
break;
}
break;
case "TextFrame":
switch (myRangeType){
case 0:
myTextCount = myCountText(myObject.texts.item(0), myCountType);
break;
case 1:
//Has the parent story already been counted?
myStory = myObject.parentStory;
myCountedState = myStory.extractLabel("AlreadyCounted");
if (myCountedState != "True"){
myTextCount = myCountText(myStory, myCountType);
myStory.insertLabel("AlreadyCounted", "True");
}
else {
myTextCount = 0;
}
break;
}
break;
default:
//Selection is a not a text object.
//There's still a chance it could be a textPath object.
if (myObject.textPaths.length !=0){
myTextCount = 0;
if (myRangeType == 1){
for (myTextPathCounter = 0; myTextPathCounter < myObject.textPaths.length; myTextPathCounter ++){
myStory = myObject.textPaths.item(myTextPathCounter).parentStory;
myCountedState = myStory.extractLabel("AlreadyCounted");
if (myCountedState != "True"){
myTextCount = myTextCount + myCountText(myObject.textPaths.item(myTextPathCounter).parentStory, myCountType);
myObject.textPaths.item(myTextPathCounter).parentStory.insertLabel("AlreadyCounted","True");
}
else{
myTextCount = 0;
}
}
}
else {
for (myTextPathCounter = 0; myTextPathCounter < myObject.textPaths.length; myTextPathCounter ++){
myTextCount = myTextCount + myCountText(myObject.textPaths.item(myTextPathCounter).texts.item(0), myCountType);
}
}
}
else {
myTextCount = 0;
}
break; }
return myTextCount;
}
function myCountText(myTextObject, myCountType){
var myTextCount;
switch(myCountType){
case 0:
//count characters
myTextCount = myTextObject.characters.length;
break;
case 1:
//count words
myTextCount = myTextObject.words.length;
break;
case 2:
//count lines
myTextCount = myTextObject.lines.length;
break;
case 3:
//count paragraphs
myTextCount = myTextObject.paragraphs.length;
break;
}
return myTextCount;
}

...
Martin Fischer
27. Feb 2008, 23:36
for-Schleife einmal ohne, einmal mit geschweiften Klammern
Hallo, miteinander!
Kai und ich rätseln schon ein paar Tage. Weshalb funktioniert das folgende Script. Es soll abfragen, ob im Dokument die Farbe "Test" bereits vorkommt. Falls NEIN, die Farbe anlegen, falls JA, nichts weiter tun. Daß dieses (erfolgreich auszuführende) Script zustande kam, beruht übrigens auf einem Schreibfehler. Wir hatten schlicht und ergreifend die geschweiften Klammern zu setzen vergessen ;-)
Code
for (var n=0; n< app.activeDocument.swatches.length; n++) 
if(app.activeDocument.swatches[n].name == "Test"){
exit ();
}
else (app.activeDocument.swatches[n].name != "Test")
{app.activeDocument.colors.add({name:"Test", model:ColorModel.PROCESS, colorValue:[0, 100, 100, 0]});
};


Im folgenden Script hingegen wird ein Fehler geworfen: "Dieser Farbfeldname wird bereits verwendet. Wählen Sie einen anderen Namen." Logisch (jedenfalls denke ich mir das so), da das Script mehrmals versucht eine Farbe mit gleichem Farbfeldnamen anzulegen.
Code
//JS soll prüfen, ob ein Farbname im Dokument enthalten ist. 
//Falls JA, nichts weiter tun
//Falls NEIN eine Farbe mit dem geprüften Namen anlegen:

//DIES FUNKTIONIERT NICHT, DA DAS SCRIPT VERSUCHT DIE FARBE "Test" MEHRMALS ANZULEGEN.

for (var n=0; n< app.activeDocument.swatches.length; n++){
if(app.activeDocument.swatches[n].name == "Test"){
exit ();
}
else (app.activeDocument.swatches[n].name != "Test")
{app.activeDocument.colors.add({name:"Test", model:ColorModel.PROCESS, colorValue:[0, 100, 100, 0]})
};
};

Aber weshalb funktioniert die obere Version des Scripts ohne die geschweiften Klammern um die Anweisungen der for-Schleife herum?
...
Uwe Laubender
23. Sep 2009, 21:18
[JS] Indexeinträge im Umbruch visualisieren
Peter Kahrel hat in den letzten Tagen im Adobe Scripting-Forum zwei interessante CS3-Skripte zur Visualisierung von Indexeinträgen veröffentlicht, die ich hier festhalten möchte:

1. Taggen
Mit diesem Skript werden die Indexeinträge an Ort und Stelle in Tags dargestellt:
'<ix>Indexeintrag</ix>'. Untereinträge werden durch '#' separiert.

Code
index2text (app.activeDocument);  
//delete_index (app.activeDocument);

function index2text (doc)
{
var tops = doc.indexes[0].allTopics;
for (var i = 0; i < tops.length; i++)
for (var j = tops[i].pageReferences.length-1; j > -1; j--)
tops[i].pageReferences[j].sourceText.contents =
'<ix>' + topic_path (tops[i], tops[i].name) + '</ix>';
}

// create topic string. Subtopics are separated by '#'
function topic_path (top, str)
{
if (top.parent.constructor.name == 'Index')
return str;
else
return topic_path (top.parent, top.parent.name + '#' + str)
}

function delete_index (doc)
{
// delete page references and topics
doc.indexes[0].topics.everyItem().pageReferences.everyItem().remove();
doc.indexes[0].topics.everyItem().remove();
}


2. Inline-Graphiken
Im Unterschied zum o.g. Skript erscheinen die Indexeinträge nicht zwischen Tags, sondern werden in einen verankerten Textrahmen, der mit dem Objektstil 'sidebar' (muss vor Ausführung des Skripts angelegt sein) ausgezeichnet wird, eingefügt. Sie laufen damit im Text mit.

Code
index2text (app.activeDocument);  
//delete_index (app.activeDocument);

function index2text (doc)
{
var tops = doc.indexes[0].allTopics;
for (var i = 0; i < tops.length; i++)
for (var j = tops[i].pageReferences.length-1; j > -1; j--)
{
var ip = tops[i].pageReferences[j].sourceText;
var p_ref = topic_path (tops[i], tops[i].name);
side_note (ip, p_ref)
}
}

// create topic string. Subtopics are separated by '#'
function topic_path (top, str)
{
if (top.parent.constructor.name == 'Index')
return str;
else
return topic_path (top.parent, top.parent.name + '#' + str)
}

function delete_index (doc)
{
// delete page references and topics
doc.indexes[0].topics.everyItem().pageReferences.everyItem().remove();
doc.indexes[0].topics.everyItem().remove();
}

function side_note (ins_point, s)
{
var sidebar = ins_point.textFrames.add ();
sidebar.geometricBounds = [0,0,10,70];
sidebar.appliedObjectStyle = app.activeDocument.objectStyles.item ('sidebar');
sidebar.contents = s;
sidebar.fit (FitOptions.frameToContent);
}


Diese beiden Skriptversionen haben mir so gut gefallen, dass ich gleich noch eine kleine Änderung für InDesign CS4 vorgenommen habe. Die Indexeinträge werden hier an Ort und Stelle in bedingten Text ('Index') umgesetzt und können damit ein- und ausgeblendet werden.

Code
// index2conditionalText.jsx 
// Original by Peter Kahrel
// modified by Martin Fischer to take use of InDesign CS4 conditional text
// 04.12.2008

Object.prototype.get = function( )
{
try {
var myObject = this.item( arguments[0].name );
myObject.name;
}
catch (e) {
var myObject = this.add( arguments[0] );
}
return myObject;
}

index2text (app.activeDocument);
//delete_index (app.activeDocument);

function index2text (doc)
{
var myConditionSet = app.activeDocument.conditions.get( {name:'Index', indicatorMethod:ConditionIndicatorMethod.USE_HIGHLIGHT} )
var tops = doc.indexes[0].allTopics;
for (var i = 0; i < tops.length; i++)
for (var j = tops[i].pageReferences.length-1; j > -1; j--)
{
var ip = tops[i].pageReferences[j].sourceText;
var p_ref = topic_path (tops[i], tops[i].name);
conditional_note (ip, p_ref, myConditionSet)
}
myConditionSet.visible = false;
}

// create topic string. Subtopics are separated by '#'
function topic_path (top, str)
{
if (top.parent.constructor.name == 'Index')
return str;
else
return topic_path (top.parent, top.parent.name + '#' + str)
}

function delete_index (doc)
{
// delete page references and topics
doc.indexes[0].topics.everyItem().pageReferences.everyItem().remove();
doc.indexes[0].topics.everyItem().remove();
}

function conditional_note (ins_point, s, c)
{
ins_point.appliedConditions = c;
ins_point.contents = s;
}


Nach Ausführung des Skripts ist der bedingte Text 'Index' ausgeblendet.
Bei Bedarf kann der bedingte Text über die Suche-Ersetze Funktion wieder gelöscht werden (etwa für eine erneute Visualisierung der Indexeinträge nach einer Erweiterung derselben).
...
Martin Fischer
5. Dez 2008, 08:07
AutoFormat in InDesingn CS3
> Mit app.documents[0] läuft das eventScript mit dem event 'afterOpen'.

Aber Achtung:
Ist bereits ein Dokument geöffnet, dann wird mit app.documents[0] das zuletzt aktive (also das, welches vor dem Öffnen des neuen Dokuments aktiv war) adressiert.

Das gerade geöffnete Dokument kann sicherer mit app.documents[-1] adressiert werden. Nur wenige Sekunden später, wenn es angezeigt wird, stimmt diese Behauptung nicht mehr. ;-)
...
Martin Fischer
8. Jul 2008, 17:33
Indesign Farbeinstellungen vorgeben
Das auskommentieren ist absicht gewesen. habs mal hier im Forum auskommentiert - nicht das irgendwas komische passiert.

ich hab jetzt mal dran weitergebastelt aber er aktiviertmir nicht das "TIP Zeitung" - es bleibt immer "Benutzerdefiniert" bei Farbprofil stehen!

Hier das momentane Script:

// Farbmanagement - Einstellungen (c) alex rath

with (app.colorSettings)
{

enableColorManagement = true;
//cmsSettingsPath = "W:\Allgem\Color\Settings";
//cmsSettingsPath = "C:\Dokumente und Einstellungen\tipdvs\anwendungsdaten\Adobe\Color\Settings";
cmsSettings = "TIP Zeitung";
rgbPolicy = ColorSettingsPolicy.convertToWorkingSpace;
cmykPolicy = ColorSettingsPolicy.preserveEmbeddedProfiles;
workingSpaceRGB = "Adobe RGB (1998)";
workingSpaceCMYK = "ISOnewspaper26v4";

alert("Voreinstellungen LAYOUT eingerichtet!");
}


Danke für die hilfe....

alex
...
alex77
15. Jan 2008, 10:03
automatischer Textfluss
Hier die CS3-Version des obigen Skripts 'AppendPagesIfStoryOverflows.jsx':

Code
//AppendPagesIfStoryOverflows_CS3.jsx  
//
// thanks to Dave Saunders for the functions isText() and DumbRunPages()
// http://jsid.blogspot.com/2005/10/standard-methods-and-functions.html

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.documents.length> 0) && (app.selection.length > 0) && (app.selection[0].isText())) {
var aStory = app.selection[0].parentStory;
var aDoc = app.documents[0];

DumbRunPages(aDoc, aStory)
}
else {
alert("Fehler\rBitte Text auswählen.")
}

function DumbRunPages(theDoc, theStory) {
// What makes this "dumb" is that default master pages are used.
var uRuler = theDoc.viewPreferences.rulerOrigin;
theDoc.viewPreferences.rulerOrigin = RulerOrigin.spreadOrigin;
while (theStory.textContainers[theStory.textContainers.length-1].overflows) {
//Seite nach der letzten Textrahmenseite einfügen
var backPage = aDoc.pages.add(LocationOptions.after, aStory.textContainers[theStory.textContainers.length-1].parent)

app.activeWindow.activePage = backPage;
backPage.appliedMaster = theDoc.pages[-2].appliedMaster;
var myPbounds = backPage.bounds;
var myNewTF = backPage.textFrames.add();
if ( (!theDoc.documentPreferences.facingPages) || (backPage.side == PageSideOptions.rightHand) ) {
myNewTF.geometricBounds =
[myPbounds[0] + backPage.marginPreferences.top,
myPbounds[1] + backPage.marginPreferences.left,
myPbounds[2] - backPage.marginPreferences.bottom,
myPbounds[3] - backPage.marginPreferences.right];
} else {
myNewTF.geometricBounds =
[myPbounds[0] + backPage.marginPreferences.top,
myPbounds[1] + backPage.marginPreferences.right,
myPbounds[2] - backPage.marginPreferences.bottom,
myPbounds[3] - backPage.marginPreferences.left];
}
myNewTF.itemLayer = theStory.textContainers[theStory.textContainers.length-1].itemLayer;
myNewTF.previousTextFrame = theStory.textContainers[theStory.textContainers.length-1];
myNewTF.textFramePreferences.textColumnCount = backPage.marginPreferences.columnCount;
myNewTF.textFramePreferences.textColumnGutter = backPage.marginPreferences.columnGutter;
if (myNewTF.characters.length == 0){
theDoc.viewPreferences.rulerOrigin = uRuler;
alert("Permanently overset"); // This indicates a permanent overset condition so break out of loop
}
}
theDoc.viewPreferences.rulerOrigin = uRuler;
}

...
Martin Fischer
22. Jan 2008, 05:38
XML Tags suchen und ersetzen
Vorhande XML-Elemente lassen sich auch mit dem Indesign-Objekt über VBA gut abgreifen.

Folgende VBA-Routine (Entwicklungs-Umgebung in allen MS-Ofiice vorhanden) klappert in der aktiven Indesign-Datei alle XML-Elemente ab und ändert das Element "Tabelle" in das Element "block" ("block" muss als Tag schon im Indesign-Dokument angelegt sein):


Option Explicit
Private AidApp As New InDesign.Application
Private lgEl As Long


Sub XmlElementRekursStart()

Dim idDoc As InDesign.Document
Dim IdXelements As InDesign.XMLElements

Set idDoc = AidApp.ActiveDocument
Set IdXelements = idDoc.XMLElements.FirstItem.XMLElements

Call XmlElementRekurs(IdXelements)


End Sub

Private Sub XmlElementRekurs(IdXelements As InDesign.XMLElements)

Dim IdXelement As InDesign.XMLElement

Dim i As Long
Dim y As Long

y = IdXelements.Count

For i = 1 To y

lgEl = lgEl + 1

Set IdXelement = IdXelements.Item(i)

If IdXelement.MarkupTag = "Tabelle" Then

'hier deine Aktion
IdXelement.MarkupTag = "block"

End If

If IdXelements.Item(i).XMLElements.Count > 0 Then

Call XmlElementRekurs(IdXelements.Item(i).XMLElements)

End If

Next

End Sub

In der VBA-Entwicklungsumgebung muss unter dem Menü "Extra/Verweise" die "Adobe Indesign CS3 (oder CS2) Type Library" hinzugefügt werden.

Gregor
...
Thaler
20. Jan 2008, 14:35
Tabbellen aus Quark in InDesign automatisch umformatieren
 
Hallo,

von Martin Fischer gibt es ein Skript (für CS2), welches eine neue Tabelle aus einer markierten Tabelle erzeugt, bei der die Spalten-/Zeilenanordnung getauscht wird.

Allerdings gehen die Tabellen-/Zellformatierungen verloren.

Vielleicht als erster Ansatz verwendbar:
Code
// transposeTableCells.jsx 
//DESCRIPTION: Transponiert die Zellen einer Tabelle (Vertauschen von Reihen und Spalten)
var myCounter = 0;
// Objektdefinition Tabelle, je nach Auswahltyp  
if (app.selection.length > 0)
{
   switch (app.selection[0].constructor.name)
   {
      case "InsertionPoint": var myOldTable = app.selection[0].parent.parent; break;
      case "Text": var myOldTable = app.selection[0].parent.parent; break;
      case "Word": var myOldTable = app.selection[0].parent.parent; break;
      case "Character": var myOldTable = app.selection[0].parent.parent; break;
      case "Cell": var myOldTable = app.selection[0].parent; break;
      case "Table": var myOldTable = app.selection[0]; break;
      case "TextFrame": var myOldTable = app.selection[0].tables[0]; break;
   }
}

if ((myOldTable != undefined) && (myOldTable.constructor.name == "Table")) // nichts oder nichts, woraus sich eine Tabelle ableiten ließe, gewählt
{
   myOldTable.cells.everyItem().unmerge(); // es dürfen keine Zellen miteinander verbunden sein
   var  myNewInsPoint = myOldTable.storyOffset; // Einfügepunkt für neue Tabelle (direkt hinter der alten Tabelle)
   // Einfügen der neuen Tabelle mit Parametern für Spalten- und Zeilenzahl
   var myNewTable = myOldTable.parent.parentStory.insertionPoints[myNewInsPoint].tables.add({columnCount:myOldTable.bodyRowCount,  bodyRowCount:myOldTable.columnCount})
   // Schleife zum Verschieben der Zelleninhalte
   for (oneCol = 0; oneCol < myOldTable.columnCount; oneCol++)
   {
      for (oneRow = 0; oneRow < myOldTable.bodyRowCount; oneRow++)
      {
         // Verschieben der Zelleninhalte
         myOldTable.cells[oneRow * myOldTable.columnCount + oneCol].texts[0].move(LocationOptions.after, myNewTable.cells[myCounter].insertionPoints[0])
         myCounter+=1;
      }
   }
   myOldTable.remove(); // Löschen der alten Tabelle
   myNewTable.cells[0].insertionPoints[0].select(); // Plazieren des Cursors in der ersten Zelle der neuen Tabelle
}
else alert("Bitte Tabelle wählen.")

...
zaphodbeeblebroxx
11. Jan 2008, 12:34
Alle offenen Dateien speichern... Skript?
Hallo Gerald,

Um alle offenen Dokumente mit "sichern unter" zu sichern und dabei durch Löschen der History ihre Dateigröße zu verringern, verwende ich folgendes Skript. Wink

Code
// saveOpenDocs.jsx 
//DESCRIPTION: Sichert alle geöffneten Dokumente und reduziert ihre Dateigröße

var myDocs = app.documents;
var unsavedDocs = 0;
for (oneDoc = 0; oneDoc < myDocs.length; oneDoc++)
(myDocs[oneDoc].saved == true)
? myDocs[oneDoc].save(myDocs[oneDoc].fullName)
: unsavedDocs++;

if (unsavedDocs > 0)
alert (unsavedDocs + " Dokument(e) nicht gesichert!")


Es sichert nur die Dokumente, die bereits einmal gesichert worden sind (also ihre pysikalische Heimat auf dem Datenträger gefunden haben).
...
Martin Fischer
11. Jan 2008, 15:50
Bestimmte Schrift in Pfade umwandeln
Chris,

das sollte damit gehen:
Code
// appliedCStoOutline.jsx 

app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;
app.findTextPreferences.appliedCharacterStyle = "Bold"; // hier Zeichenformat angeben
var myResult = app.activeDocument.findText();
for (i = myResult.length-1; i >= 0; i--)
myResult[i].createOutlines();

...
Martin Fischer
28. Nov 2007, 15:34
Eventskript "neue Ebenen"
Hallo Stefan,

> Fehlerzeichenfolge: Es existiert bereits eine Ebene dieses Namens.

Ist dem so?
Existiert bei Dir eine Ebene mit Namen "Text"?

Auf die fehlende geschweifte Klammer am Ende hat Quarz bereits hingewiesen.

Eine Ebene (hier die Ebene 'Text') kannst Du mit folgendem Befehl ganz nach oben verschieben:
app.activeDocument.layers.item( 'Text' ).move( LocationOptions.atBeginning );

Das Gegenteil (ganz nach unten) wäre:
app.activeDocument.layers.item( 'Text' ).move( LocationOptions.atEnd );

Übrigens sieht meine eigene Version jetzt so aus:
Code
//addLayer.jsx 
#targetengine "myEngine"

var myEventListener = app.addEventListener( "afterNew", addLayer, false );

function addLayer( myEvent )
{
myDoc = myEvent.parent;
myDoc.layers[0].name = 'Text'
myDoc.layers.add( {name: 'Grafik', layerColor: UIColors.red} );
myDoc.layers.add( {name: 'Notes', layerColor: UIColors.gray} );
// ... weitere Ebenen hinzufügen

// die unterste Ebene aktivieren
myDoc.activeLayer = myDoc.layers[-1]; // oder ... = myDoc.layers.item( 'Text' );
}


D.h. ich lösche die vorhandene Ebene nicht, sondern benenne sie einfach um.
Das Löschen würde Probleme bereiten, wenn ein neues Dokument mit der Option "Mustertextrahmen" angelegt würde. Denn dort würden die Mustertextrahmen auf die Ebene gelegt, die gleich danach gelöscht wird.

Am Ende wird die unterste Ebene aktiviert.
...
Martin Fischer
12. Nov 2007, 10:37
Hier Klicken

Photoshop / Lightroom

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
13.12.2018 - 20.12.2018

3400 Burgdorf, BE
Donnerstag, 13. Dez. 2018, 09.00 Uhr - Donnerstag, 20. Dez. 2018, 09.00 Uhr

Workshop

Schritt für Schritt: Planen, konzipieren und Umsetzen einer responsiven Website mit Wordpress: Lokalen Server einrichten; Frontend/Backend; Vorgehen Schritt für Schritt bis zur fertigen Site.

2-Tages-Workshop CHF 990.00

Ja

Organisator: PubliCollege GmbH

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

www.publicollege.ch

Websites erstellen mit Wordpress und Elementor Pro
Veranstaltungen
19.12.2018

Wie installiert und konfiguriert man Mailchimp und verwendet es für sein Business

Internet
Mittwoch, 19. Dez. 2018, 10.00 - 11.30 Uhr

Webinar

In diesem Webinar zeige ich den Teilnehmern, wie sie mit Mailchimp eigene Newsletter verschicken können. Wie sie Mailchimp installieren und konfigurieren müssen und wie sie eine erste Kampagne machen können.

Gratis

Ja

Organisator: Eric Mächler

https://events.genndi.com/register/818182175026318367/4ac0f277c0

Der Start ins E-Mail Marketing mit Mailchimp