[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt addition von fixem betrag zu ausgewählten zahlen in tabelle - auswahl nicht über stil

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

addition von fixem betrag zu ausgewählten zahlen in tabelle - auswahl nicht über stil

junggrafik
Beiträge gesamt: 115

19. Okt 2010, 17:35
Beitrag # 1 von 4
Bewertung:
(1298 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zusammen

ich bin an diesem arbeitsplatz mit indesign cs3 unterwegs:
mit folgendem script (ursprünglich multiplikation) addiere ich fixe beträge zu vorhanden beträgen.
jetzt möchte ich auf die auswahl per stil verzichten und mehrere tabellenzellen auf einmal auswählen und die berechnung auf den inhalt der ausgewählten tabellenzellen ausführen.
Jetzt reichen meine Programmierkenntnisse nicht mehr aus - sprich ich krieg den // Dialog nicht angepasst - vielleicht kann mir jemand einen hinweis geben...

vielen dank - gruss michael

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

var myDoc = app.documents[0];
var mySel = app.selection[0];
var theStyles = myDoc.characterStyles.everyItem().name; // Zeichenformate in Array
theStyles.shift(); // Abschneiden von Zeichenformat [Keine]

// es muß etwas ausgewählt sein und das erste Element der Auswahl muß zu Klasse Text gehören.
if ((app.selection.length > 0) && (mySel.isText()))
{
var theData = myDisplayDialog(); // Funktionsaufruf
var myFactor = theData.factor;
if (myFactor != undefined)
{
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedCharacterStyle = theData.style;
var myNumbers = app.activeDocument.findText();

for (oneNum = myNumbers.length-1; oneNum >= 0; oneNum--)
{
// Funktionsaufruf zu Berechnung und
// Zuweisung des neuen Inhats
if (isNaN(myNumbers[oneNum].contents.split(",").join(".") )){}
else
{
myNumbers[oneNum].contents = theCalculation(myNumbers[oneNum].contents)
}
}
}
}
else
{
if (app.selection.length == 0) alert("Nichts ausgewählt!")
else alert("Bitte Text auswählen!")
}

// Dialog
function myDisplayDialog()
{
var myFieldWidth = 80;

var myDialog = app.dialogs.add({name:"Berechnung"});
with(myDialog.dialogColumns.add())
{
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Faktor:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myFacTextEditbox = textEditboxes.add({editContents:"1,05", minWidth:140});
}
}
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Zeichenformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myStylesDropDown = dropdowns.add({stringList:theStyles, selectedIndex:0, minWidth:140});
}
}
}
var myResult = myDialog.show();
if(myResult == true)
{
var aFactor = myFacTextEditbox.editContents.split(",").join(".")*1;
var aStyle = theStyles[myStylesDropDown.selectedIndex];
//Remove the dialog box from memory.
myDialog.destroy();
}
else
{
myDialog.destroy();
}
return {factor:aFactor, style:aStyle};
}


// Berechnungsfunktion
function theCalculation(theData){
var theOldNumber = theData.split(",").join(".") // Komma wird ggf. durch Punkt ersetzt
var theNewNumber = (parseFloat(theOldNumber) + myFactor) + ""; // Berechnung der neuen Zahl
// Rundung bzw. Ergänzung auf zwei Nachkommastellen
var k = (Math.round(theNewNumber * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var theNewNumber = k.substring(0, k.indexOf('.') + 3);
var theNewString = (theNewNumber + "").split(".").join(","); // Umwandlung in String, Punkt wird Komma
return theNewString;
}// BerechnungMitDialog+RundungAuf2Kommastellen_CS3.jsx
//
Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

var myDoc = app.documents[0];
var mySel = app.selection[0];
var theStyles = myDoc.characterStyles.everyItem().name; // Zeichenformate in Array
theStyles.shift(); // Abschneiden von Zeichenformat [Keine]

// es muß etwas ausgewählt sein und das erste Element der Auswahl muß zu Klasse Text gehören.
if ((app.selection.length > 0) && (mySel.isText()))
{
var theData = myDisplayDialog(); // Funktionsaufruf
var myFactor = theData.factor;
if (myFactor != undefined)
{
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedCharacterStyle = theData.style;
var myNumbers = app.activeDocument.findText();

for (oneNum = myNumbers.length-1; oneNum >= 0; oneNum--)
{
// Funktionsaufruf zu Berechnung und
// Zuweisung des neuen Inhats
if (isNaN(myNumbers[oneNum].contents.split(",").join(".") )){}
else
{
myNumbers[oneNum].contents = theCalculation(myNumbers[oneNum].contents)
}
}
}
}
else
{
if (app.selection.length == 0) alert("Nichts ausgewählt!")
else alert("Bitte Text auswählen!")
}

// Dialog
function myDisplayDialog()
{
var myFieldWidth = 80;

var myDialog = app.dialogs.add({name:"Berechnung"});
with(myDialog.dialogColumns.add())
{
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Faktor:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myFacTextEditbox = textEditboxes.add({editContents:"1,05", minWidth:140});
}
}
with(dialogRows.add())
{
with(dialogColumns.add())
{
staticTexts.add({staticLabel:"Zeichenformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add())
{
var myStylesDropDown = dropdowns.add({stringList:theStyles, selectedIndex:0, minWidth:140});
}
}
}
var myResult = myDialog.show();
if(myResult == true)
{
var aFactor = myFacTextEditbox.editContents.split(",").join(".")*1;
var aStyle = theStyles[myStylesDropDown.selectedIndex];
//Remove the dialog box from memory.
myDialog.destroy();
}
else
{
myDialog.destroy();
}
return {factor:aFactor, style:aStyle};
}


// Berechnungsfunktion
function theCalculation(theData){
var theOldNumber = theData.split(",").join(".") // Komma wird ggf. durch Punkt ersetzt
var theNewNumber = (parseFloat(theOldNumber) + myFactor) + ""; // Berechnung der neuen Zahl
// Rundung bzw. Ergänzung auf zwei Nachkommastellen
var k = (Math.round(theNewNumber * 10) / 10).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var theNewNumber = k.substring(0, k.indexOf('.') + 3);
var theNewString = (theNewNumber + "").split(".").join(","); // Umwandlung in String, Punkt wird Komma
return theNewString;
}

X

addition von fixem betrag zu ausgewählten zahlen in tabelle - auswahl nicht über stil

SamiSalami
Beiträge gesamt: 66

26. Okt 2010, 12:18
Beitrag # 2 von 4
Beitrag ID: #455161
Bewertung:
(1244 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

Ich würde dir empfehlen das Skript neuzuschreiben und lediglich die Berechnungsfunktion zu übernehmen. Auch den Dialog kannst du für deine Idee weglassen.
Ich glaube das ist super für dich um in das Scripting einzusteigen.

Hiermit zumindest greifst du schonmal auf deine Selektion (Markiertes) zu:
Code
var mySel = app.selection[0]; 


Die folgende Funktion kannst du ebenfalls übernehmen, sie überprüft, dass deine Selektion auch "textfähige" Objekte sind:

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


Und hier schließlich die Rechenmethode:

Code
// Berechnungsfunktion     
function theCalculation(theData){
var theOldNumber = theData.split(",").join(".") // Komma wird ggf. durch Punkt ersetzt
var theNewNumber = (parseFloat(theOldNumber) + myFactor) + ""; // Berechnung der neuen Zahl
// Rundung bzw. Ergänzung auf zwei Nachkommastellen
var k = (Math.round(theNewNumber * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var theNewNumber = k.substring(0, k.indexOf('.') + 3);
var theNewString = (theNewNumber + "").split(".").join(","); // Umwandlung in String, Punkt wird Komma
return theNewString;
}


Also als Denkansatz:

Prüfe die Selektion:
- ist überhaupt etwas selektiert?
- Ist es auch Text?

Führe durch:
- sammle benötigte Daten (kann auch vorerst fix reingeschrieben sein)
- berechne und schreibe Ergebnisse für alle textfähigen Objekte

Solltest du dann noch einen Dialog wollen, kann man sich darum zum Schluss kümmern - arbeite erstmal mit festen Werten, um etwas Lauffähiges zu erhalten.

Hierfür findest du schon einige Sachen in deinem bestehenden Skript, bastel das erstmal zusammen um ein Gefühl dafür zu kriegen; dann können wir konkret an deinen Problemen arbeiten.


als Antwort auf: [#454561]

addition von fixem betrag zu ausgewählten zahlen in tabelle - auswahl nicht über stil

junggrafik
Beiträge gesamt: 115

26. Okt 2010, 16:47
Beitrag # 3 von 4
Beitrag ID: #455216
Bewertung:
(1226 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo sami

hab jetzt gerade im moment neue stile gesetzt, die Berechnungen ausgeführt und die stile wieder zurückgestellt.
Der Leidensdruck am Skript rumzudoktern ist deswegen grad wieder etwas gesunken, aber ich weiss, dass ich jetzt aus Respekt dir gegenüber sollte - geschickt gemacht :-)
jetzt deswegen noch einige Fragen:

Muss ich die Schleife auch wieder 2 mal ablaufen lassen wie bei meinem bestehenden script?
und hab ich denn was zum debuggen in indesign?

viele Grüsse

Michael


als Antwort auf: [#455161]

addition von fixem betrag zu ausgewählten zahlen in tabelle - auswahl nicht über stil

SamiSalami
Beiträge gesamt: 66

26. Okt 2010, 17:22
Beitrag # 4 von 4
Beitrag ID: #455220
Bewertung:
(1214 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
1. Hm, welche Schleife meinst du? Da ich das Skript selbst noch nicht angewandt habe, kann ich so mit draufschauen noch nicht wirklich beurteilen, wie oft da was durchläuft; meinst du die hier:

Code
for (oneNum = myNumbers.length-1; oneNum >= 0; oneNum--)     
{
// Funktionsaufruf zu Berechnung und
// Zuweisung des neuen Inhats
if (isNaN(myNumbers[oneNum].contents.split(",").join(".") )){}
else
{
myNumbers[oneNum].contents = theCalculation(myNumbers[oneNum].contents)
}
}


Zu 2.:
Das ESTK ist mitinstalliert und startet automatisch wenn du in Indesign Skripte bearbeiten willst. Dieses bietet eine Objektübersicht, sowie einen Debuggingmodus - wirklich überzeugt bin ich allerdings davon nicht. Es ist halt wie alles wo sich Entwicklung und Design kreuzen und aufm Mac dann treffen... (Mac = keine Entwicklungsumgebung; ESTK aus Gestaltungsecke....)
Aber es bietet halt ansonsten auch echt kaum Features und die Intellisence ist einfach nur ein schlechter Witz. Bist du allerdings jemand der eh in Textedit/Notepad++/Editor die Sachen macht, wirst du damit schon klarkommen.
Ist ja auch nur meine persönliche Meinung :-)


als Antwort auf: [#455216]
X