Hi. The following script works fine. What bothers me is the relatively long running time. Processing is too slow. Can one optimize something about it without rewriting the whole thing? At beginner level. It changes textfields and its tables based on input through a dialog. app.doScript(funktionAusführen, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Funktionsprozess");
function funktionAusführen () {
var myDoc = app.activeDocument;
var allSelection = myDoc.selection;
if(allSelection.length == "0") {alert("Bitte mindesten ein Textfeld auswählen!"); exit();}
var allSelection = app.selection,
runs = allSelection.length,
osGrArtikel = myDoc.objectStyleGroups.itemByName('SF_Artikel'),
psGrArtikel = myDoc.paragraphStyleGroups.itemByName('SF_Artikel'),
psGrTabelle = myDoc.paragraphStyleGroups.itemByName('SF_Artikel_Tabellen'),
osArtikel55 = osGrArtikel.objectStyles.itemByName('SF_Artikel_55mm'),
osArtikel85 = osGrArtikel.objectStyles.itemByName('SF_Artikel_85mm'),
osArtikel115 = osGrArtikel.objectStyles.itemByName('SF_Artikel_115mm'),
psArtikelDruck = psGrArtikel.paragraphStyles.itemByName('SF_Artikel_1sp_Druck'),
psArtikelNr = psGrArtikel.paragraphStyles.itemByName('SF_Artikel_1sp_ArtNr'),
psArtikelTab = psGrArtikel.paragraphStyles.itemByName('SF_Artikel_Tabelle'),
psMenge = psGrTabelle.paragraphStyles.itemByName('SF_Tabellen_Menge'),
psWeissMenge = psGrTabelle.paragraphStyles.itemByName('SF_Tabelle_weiss_Menge'),
tsBasis = myDoc.tableStyles.itemByName('SF_Tabelle_Basis'),
tsAufHG = myDoc.tableStyles.itemByName('SF_Tabelle_aufHG'),
tsKaufTipp = myDoc.tableStyles.itemByName('SF_Tabelle_KaufTipp'),
tcsFooter = myDoc.cellStyles.itemByName('SF_Tabelle_Standard_Fuss'),
osNone = myDoc.objectStyles.itemByName('[Ohne]'),
psNone = myDoc.paragraphStyles.itemByName('[Einf. Abs.]'),
csNone = myDoc.characterStyles.itemByName('[Ohne]'),
tsNone = myDoc.tableStyles.itemByName('[Einfache Tabelle]'),
tcsNone = myDoc.cellStyles.itemByName('[Ohne]');
// variables for table-style, last row.width, last row.original width
var tsVar, spBr, spVar = "";
// variables with standard values for horizontal scale and tracking
var spaceVar = 97, lSpVar = -10;
// variables with standard values for first line indent and left indent
var flIndent = -2.5; lIndent = 2.5;
// variable for paragraph style - first paragraph in first cell in the first raw of the table
var pMengeStyle;
dialogPart() ;
for (i=0; i<runs; i++) {
var thisTables = allSelection[i].tables.length;
clearJunk() ;
removeStyles();
applyStyles();
}//SCHLEIFE ENDE
function clearJunk() {
eachPara = allSelection[i].paragraphs.length;
var myPara = allSelection[i].paragraphs;
for (var n=0; n<eachPara; n++) {
app.findGrepPreferences.findWhat = "(Art\\.-Nr\\.\\s.+?)\\n";
app.changeGrepPreferences.changeTo = "$1~b";
myPara[n].changeGrep();
app.findGrepPreferences.findWhat = "\\n";
app.changeGrepPreferences.changeTo = " ";
myPara[n].changeGrep();
app.findGrepPreferences.findWhat = " +";
app.changeGrepPreferences.changeTo = " ";
myPara[n].changeGrep();
}//SCHLEIFE ENDE
}//FUNKTION clearJunk ENDE
// override any style
function removeStyles(eachPara) {
allSelection[i].applyObjectStyle(osNone, true);
eachPara = allSelection[i].paragraphs.length;
var myPara = allSelection[i].paragraphs;
for (var n=0; n<eachPara; n++) {
//remove styles
myPara[n].applyParagraphStyle(psNone, true);
myPara[n].applyCharacterStyle(csNone, true);
//Clear Overrides
myPara[n].clearOverrides(OverrideType.ALL);
}//SCHLEIFE ENDE
// format table also, if there is one
if(allSelection[i].tables.length > 0){
for (var t=0; t<thisTables; t++) {
myLastRow = allSelection[i].tables[t].rows[-1];
allSelection[i].tables[t].rows.everyItem.rowType = RowTypes.BODY_ROW;
//remove styles
allSelection[i].tables[t].appliedTableStyle = tsNone;
allSelection[i].tables[t].cells.everyItem.applyedCellStyle = tcsNone;
for(var tc=0;tc<allSelection[i].tables[t].cells.length;tc++) {
//Clear CellStyle Overrides
allSelection[i].tables[t].cells[tc].clearCellStyleOverrides();
}//INNERE SCHLEIFE ENDE
}//ÄUßERE SCHLEIFE ENDE
}//BEDINGUNG ENDE
}//FUNKTION removeStyles ENDE
function applyStyles() {
if (allSelection[i].parentPage.side == PageSideOptions.RIGHT_HAND) {
if (tsVar.name == "SF_Tabelle_aufHG") {flIndent = -5; lIndent = 5;}
if (tsVar.name == "SF_Tabelle_KaufTipp") {flIndent = -7.5; lIndent = 7.5; }
if (tsVar.name != "SF_Tabelle_Basis" && osVar.name == "SF_Artikel_115mm") {spBr = spBr; }
else {
if (tsVar.name == "SF_Tabelle_Basis") {spBr = spBr;}
if ((tsVar.name == "SF_Tabelle_aufHG" && osVar.name == "SF_Artikel_55mm") |
(tsVar.name == "SF_Tabelle_aufHG" && osVar.name == "SF_Artikel_85mm")) {spBr = spBr-2.5; spaceVar = 95; lSpVar = -15;}
if ((tsVar.name == "SF_Tabelle_KaufTipp" && osVar.name == "SF_Artikel_55mm") |
(tsVar.name == "SF_Tabelle_KaufTipp" && osVar.name == "SF_Artikel_85mm")) {spBr = spBr-5; spaceVar = 93; lSpVar = -15;}
}
}
else {
if (tsVar.name == "SF_Tabelle_Basis") {spBr = spBr;}
if (tsVar.name == "SF_Tabelle_aufHG") {
spBr = spBr-2.5; spaceVar = 95; lSpVar = -15;
}
if ((tsVar.name == "SF_Tabelle_KaufTipp" && osVar.name == "SF_Artikel_55mm") |
(tsVar.name == "SF_Tabelle_KaufTipp" && osVar.name == "SF_Artikel_85mm") |
(tsVar.name == "SF_Tabelle_KaufTipp" && osVar.name == "SF_Artikel_115mm")) {spBr = spBr-5; spaceVar = 93; lSpVar = -15;}
}
allSelection[i].applyObjectStyle(osVar, true);
eachPara = allSelection[i].paragraphs.length;
var myPara = allSelection[i].paragraphs;
// Jeden Absatz prüfen, ob er als erstes Wort "Werbefläche" enthält
for (var n=0; n<eachPara; n++) {
var m = n-1;
if (myPara[n].words.length > 0){
if(myPara[n].words[0].contents === "Werbefläche") {
myPara[n].applyParagraphStyle(psArtikelDruck, true);
myPara[n].leftIndent = lIndent;
myPara[m].leftIndent = lIndent;
myPara[n].firstLineIndent = flIndent;
myPara[m].firstLineIndent = flIndent;
break;
}//BEDINGUNG ENDE
}//BEDINGUNG ENDE
// format table also, if there is one
if(allSelection[i].tables.length > 0){
for (var t=0; t<thisTables; t++) {
if (myLastRow.rowType.toString() != "FOOTER_ROW") {myLastRow.rowType = RowTypes.FOOTER_ROW;}//BEDINGUNG ENDE
//apply styles
allSelection[i].tables[t].appliedTableStyle = tsVar;
allSelection[i].tables[t].rows[0].cells[0].paragraphs[0].applyParagraphStyle(pMengeStyle, true);
myLastRow.cells[0].appliedCellStyle = tcsFooter;
myLastRow.width = spBr ;
myLastRow.cells[0].texts.everyItem().horizontalScale = spaceVar;
myLastRow.cells[0].texts.everyItem().tracking = lSpVar;
}//SCHLEIFE ENDE
}//BEDINGUNG ENDE
}//SCHLEIFE ENDE
// reset variable values
spBr = spVar;
vflIndent = -2.5; lIndent = 2.5;
}//FUNKTION applyStyles ENDE
function dialogPart() {
var w = new Window('dialog', "Bitte Formatierung wählen");
w.alignChildren = "left";
grp1 = w.add('panel', undefined, "Satzbreite");
grp1.alignChildren = "left";
grp1.add('radiobutton', undefined, '55 mm');
grp1.add('radiobutton', undefined, '85 mm');
grp1.add('radiobutton', undefined, '115 mm');
grp1.children[0].value = true;
grp2 = w.add('panel', undefined, "Variante");
grp2.alignChildren = "left";
grp2.add('radiobutton', undefined, 'standard', {borderStyle:'etched'});
grp2.add('radiobutton', undefined, 'auf Hintergrund', {borderStyle:'sunken'});
grp2.add('radiobutton', undefined, 'KaufTipp', {borderStyle:'raised'});
grp2.children[0].value = true;
var finishGroup = w.add("group");
finishGroup.add("button", undefined, "OK");
finishGroup.add("button", undefined, "Cancel");
function selected_rbutton (rbuttons) {
for(var i=0; i<rbuttons.children.length; i++){
if (rbuttons.children[i].value == true) {
return rbuttons.children[i].text;
}
}
}
if (w.show() == 1) {
switch (selected_rbutton(grp1)) {
case '55 mm': spVar = spBr = "55 mm", osVar = osArtikel55;
break;
case '85 mm': spVar = spBr = "85 mm", osVar = osArtikel85;
break;
case '115 mm': spVar = spBr = "55 mm", osVar = osArtikel115;
break;
}
switch (selected_rbutton(grp2)) {
case 'standard': tsVar = tsBasis, pMengeStyle = psMenge;
break;
case 'auf Hintergrund': tsVar = tsAufHG, pMengeStyle = psMenge;
break;
case 'KaufTipp': tsVar = tsKaufTipp, pMengeStyle = psWeissMenge;
break;
}
} else {alert("Prozess abgebrochen"); exit();}
}
}
... View more