[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Indesign, Tabellen und Zahlen

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

Indesign, Tabellen und Zahlen

olvradam
Beiträge gesamt: 249

4. Okt 2006, 12:50
Beitrag # 1 von 46
Bewertung:
(71687 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich liebe ID und hasse WORD. Ich würde am liebsten unsere Geschäftskorrespondenz mit ID abwickeln, gerade auch wegen der OpenType-Features. Was mich bisher noch davon abhält, ist, dass ich in den Tabellen keine einfachen Berechnungen vornehmen kann, sprich, keine Rechnungen erstellen kann.

Gibt es mittlerweile Wege, Scripts, Plugins etc., die mir helfen könnten? Nach meiner Recherche wahrscheinlich nicht, aber wer weiß …

Was wäre ein Workaround? Habt Ihr Erfahrung, was den REIBUNGSLOSEN Import und die Änderung von importierten Excel-Tabellen angeht? Auf welche Fallen muss man achten?

Liebe Grüße

Oliver

(Dieser Beitrag wurde von olvradam am 4. Okt 2006, 12:51 geändert)
X

Indesign, Tabellen und Zahlen

Kai Rübsamen
Beiträge gesamt: 4684

4. Okt 2006, 13:38
Beitrag # 2 von 46
Beitrag ID: #254590
Bewertung:
(71582 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Mir ist nicht bekannt, dass man Indesign durch Script oder plugin zum rechnen bringen kann!

> Was wäre ein Workaround? Habt Ihr Erfahrung, was den REIBUNGSLOSEN Import und die Änderung von importierten Excel-Tabellen angeht? Auf welche Fallen muss man achten?

Import- und Aktualisierungsmöglichkeiten haben wir hier in den letzten 2-3 Monaten ausführlich diskutiert. Nutze hierzu bitte die Suchfunktion des Forums. Inwieweit es allerdings Sinn macht, eine Rechnung in Excel zu schreiben und dann in Indesign zu aktualisieren ist eine andere Sache ... denn man hat ja nicht immer die gleiche Anzahl an Positionen usw.

Wenn du dir aber in Excel ein Template baust wird es sicher auch sauber in Indesign funktionieren.
Möglichkeit 1: Standardschrift Arial, Änderungen durch einfaches aktualisieren der Datei
Möglichkeit 2: Formatierung/Auszeichnungen einzelner Tabellenzellen, Aktualiesierung durch script PopTabFmClip

Ich schreibe meine Rechnungen auch in Indesign, ändere alle Werte per Hand und hatte leider dadurch auch schon mal den einen oder anderen Fehler!


als Antwort auf: [#254581]
(Dieser Beitrag wurde von ruebi am 4. Okt 2006, 13:43 geändert)

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

4. Okt 2006, 14:12
Beitrag # 3 von 46
Beitrag ID: #254603
Bewertung:
(71559 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Mir ist nicht bekannt, dass man Indesign durch Script oder plugin zum rechnen bringen kann!

Das ist durchaus möglich.
Dies zeigen ein paar Scriptbeispiele von http://www.hilfdirselbst.org/...ripte+-+Linksammlung unter der Überschrift "Berechnungen".

Die eigentliche Berechnung erfolgt dabei durch das Skript. Die der Berechnung zugrundeliegenden Zahlen und der Platz, wo das Ergebnis erscheinen soll, müssen dem Skript in Form einer eindeutigen Regel mitgeteilt werden. Dies geht z.B. über Zeichenformate (Zahlen/Stellen, die mit Zeichenformaten ausgezeichnet sind) oder über beschriebene (adressierte) Zellen einer Tabelle.

Hier ein einfaches Beispiel, in dem die Zahlen der letzten Spalte einer Tabelle (bis zur vorletzten Reihe) in die Zelle rechts unten summiert werden (der Cursor muß sich in einer Zelle der Tabelle befinden):
Code
// simpleTableCalculation.jsx  

if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var mySum = 0;
for (k = 0; k < myLastRow; k++) {
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1
}
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum);
}

function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



als Antwort auf: [#254590]
(Dieser Beitrag wurde von Martin Fischer am 26. Mai 2007, 21:55 geändert)

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

5. Okt 2006, 12:50
Beitrag # 4 von 46
Beitrag ID: #254791
Bewertung:
(71525 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vorhin bin ich über eine PM gefragt worden, wie das obige Skript anzuwenden sei:

Zitat Leider verstehe ich nicht wie es anzuwenden ist. Können Sie mir einen Tip geben?


Diese Frage könnte von allgemeinem Interesse sein, deswegen antworte ich öffentlich.

Zum Sichern eines Skripts siehe die Hinweise unter http://www.hilfdirselbst.org/...amp;t=Skript+sichern

1. Zum Aufbau der Tabelle habe ich einen Screenshot (simpleTable.jpg) angehängt.

2. Vor dem Starten des Skripts muß sich der Cursor in einer Zelle der Tabelle befinden (welche, das ist egal).

3. Das Skript ist so geschrieben, daß es die Zahlen in der letzten Spalte (hier Spalte 6, bei einer 3-spaltigen Tabelle wäre es Spalte 3) addiert und die Summe in die Zelle rechts unten (hier Spalte 6, Reihe 5) schreibt. Das Format der Tabelle, der Zellen und der Zahlen ist egal.
Genaugenommen addiert es nicht alle Zahlen in der letzten Spalte, sondern nur die von Reihe 1 bis 4 (also bis zur vorletzten Reihe, denn in der letzten Reihe soll ja die Summe stehen).

4. Bei nochmaligem Start des Skripts wird der Inhalt der Zelle rechts unten überschrieben.

Ist es so verständlich?
Funktioniert es so?


als Antwort auf: [#254603]
Anhang:
simpleTable.jpg (53.6 KB)

Indesign, Tabellen und Zahlen

Mr. Zwiebelfisch
Beiträge gesamt: 453

5. Okt 2006, 13:10
Beitrag # 5 von 46
Beitrag ID: #254796
Bewertung:
(71515 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hey ho!

Das klappt super. Vielen lieben Dank :-)


als Antwort auf: [#254791]

Indesign, Tabellen und Zahlen

olvradam
Beiträge gesamt: 249

5. Okt 2006, 23:30
Beitrag # 6 von 46
Beitrag ID: #254923
Bewertung:
(71479 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wow, das klingt ja spannend! Kann man das Script kaufmännisch so erweitern, dass es

1) die Summe adiert, sprich in der Rechnung den Nettobetrag, und den Betrag in der vorvorletzten Zelle der letzen Spalte einträgt,

2) in der Zelle darunter die Umsatzsteuer ausrechnet,

3) um dann in der letzten Zelle die Gesamtsumme (brutto) auszugeben?

Mehr bräuchte es doch für eine einfache Rechnung eigentlich gar nicht und ich wäre Word los ;-)

Liebe Grüße, Oliver


als Antwort auf: [#254796]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

5. Okt 2006, 23:38
Beitrag # 7 von 46
Beitrag ID: #254925
Bewertung:
(71476 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Mehr bräuchte es doch für eine einfache Rechnung eigentlich gar nicht
> und ich wäre Word los ;-)

Na, da will ich mal ein bißchen nachhelfen:
Code
// simpleBilling.jsx   

var MWST = 16/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var mySum = 0;
for (k = 0; k < myLastRow-2; k++) {
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1
}
myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum);
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST);
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum);
}

function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



als Antwort auf: [#254923]
(Dieser Beitrag wurde von Martin Fischer am 26. Mai 2007, 22:01 geändert)

Indesign, Tabellen und Zahlen

olvradam
Beiträge gesamt: 249

5. Okt 2006, 23:42
Beitrag # 8 von 46
Beitrag ID: #254927
Bewertung:
(71472 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Cool! Das probiere ich morgen mal aus. Achso: Funktioniert das Skript auch in Indesign CS?

Liebe Grüße, Oliver


als Antwort auf: [#254925]
(Dieser Beitrag wurde von olvradam am 5. Okt 2006, 23:43 geändert)

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

5. Okt 2006, 23:47
Beitrag # 9 von 46
Beitrag ID: #254928
Bewertung:
(71468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Funktioniert das Skript auch in Indesign CS?

Ja.
Und ganz am Anfang kann man die aktuelle Mehrwertsteuer einstellen:
Code
var MWST = 16/100; 



als Antwort auf: [#254927]
(Dieser Beitrag wurde von Martin Fischer am 5. Okt 2006, 23:50 geändert)

Indesign, Tabellen und Zahlen

olvradam
Beiträge gesamt: 249

7. Okt 2006, 12:31
Beitrag # 10 von 46
Beitrag ID: #255154
Bewertung:
(71366 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Klappt ausgezeichnet! Vielen Dank, Martin :-)


als Antwort auf: [#254928]

Indesign, Tabellen und Zahlen

soapboxdesign
Beiträge gesamt: 2

9. Feb 2010, 09:22
Beitrag # 11 von 46
Beitrag ID: #433089
Bewertung:
(65787 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
guten Tag zusammen,

ich bin beim Suchen nach einer Lösung zum Rechnen mit InDesign über diese Lösung gefallen. Funktioniert toll, ich habe das Ganze ein wenig erweitert und an meine Bedürfnisse angepasst.

Das Script multipliziert jetzt zusätzlich die Tabellenfelder Stunden und Netto und rechnet die Endsummen aller Positionen untereinander auf, wie von Martin Fischer so elegant gelöst.

Mein Problem ist gerade, dass bei der Eingabe nur Kommazahlen mit Punkt akzeptiert werden, bei einem Komma als Dezimaltrennzeichen wird NaN ausgegeben.
Kann mir hier bitte jemand auf die Sprünge helfen? Ich komme mit meinen Kenntnissen hier nicht so recht weiter ...

Hier mein Code:
Code
 
// simpleBilling.jsx

var MWST = 16/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(3).contents;
var myNetto = myTable.columns.item(4).contents;
var mySum = 0;
var myPrice = 0;
for (k = 0; k < myLastRow-2; k++) {

myPrice = (((myTable.columns.item(3).cells[k].contents))*((myTable.columns.item(4).cells[k].contents)));

myTable.columns.item(3).cells[k].contents = digitFormatter(myTable.columns.item(3).cells[k].contents);
myTable.columns.item(4).cells[k].contents = digitFormatter(myTable.columns.item(4).cells[k].contents);

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " EUR";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " EUR";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " EUR";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " EUR";
}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}


Dennis Wehrmann


als Antwort auf: [#254928]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

9. Feb 2010, 09:49
Beitrag # 12 von 46
Beitrag ID: #433095
Bewertung:
(65775 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dennis,

für Berechnungen braucht's den Punkt als Dezimaltrennzeichen.
Ersetze deswegen im string, der für eine Zahlenoperation verwendet werden soll, das Komma durch einen Punkt:
Code
var myString = '123,45'; 
var myNum = Number( myString.replace(",", ".") );


Brauchst Du am Ende im string (etwa Text in der Tabelle) wieder ein Komma, dann ersetze den Punkt im string (also nach der Umwandlung der Zahl in einen string) wieder zurück:

Code
var myNum = 123.45; 
var myString = String( myNum).replace(".", ",");



als Antwort auf: [#433089]

Indesign, Tabellen und Zahlen

soapboxdesign
Beiträge gesamt: 2

9. Feb 2010, 20:49
Beitrag # 13 von 46
Beitrag ID: #433187
Bewertung:
(65698 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke vielmals für die Hilfestellung, ich werde mal versuchen, Deinen Ansatz einzubauen.

Viele Grüße
Dennis Wehrmann


als Antwort auf: [#433095]

Indesign, Tabellen und Zahlen

technikfreak
Beiträge gesamt: 4

8. Mai 2011, 11:41
Beitrag # 14 von 46
Beitrag ID: #470886
Bewertung:
(62052 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

jetzt muss ich das Thema leider noch einmal aufwärmen. Versuche gerade aktuell in InDesign ein Rechnungstemplate zu bauen. Ich möchte aber nicht automatisch die letzten drei Zeilen auswählen für Netto, Mwst. und Gesamtsumme sonder über ein einmalig zugewiesenes Zeichenformat. Dieses Zeichenformat befindet sich dann auch in einer anderen Tabelle.

Was genau muss ich ändern, um nicht nach Tabellenzeilen zu gehen sonder nach Zeichenformaten einzufügen?

Vielen Dank und liebe Grüße

Julian


als Antwort auf: [#433187]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

9. Mai 2011, 07:35
Beitrag # 15 von 46
Beitrag ID: #470914
Bewertung:
(61955 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

herzlich willkommen im Forum.

Antwort auf: Was genau muss ich ändern, um nicht nach Tabellenzeilen zu gehen sonder nach Zeichenformaten einzufügen?

Erst mal anders herum gefragt: hast Du etwas Erfahrung im Skripten oder brauchst Du einfach eine maßgeschneiderte Lösung?


Wenn ersteres: Kannst Du das Ziel für das Ergebnis (skripttechnisch) beschreiben?
Etwa: eine (die erste oder alle) Fundstelle der Suche nach Text mit einem best. Zeichenformat?

Dazu müsstest Du zunächst die Suchparameter einstellen,
dann die Suche ausführen (dokumentweit oder in einem best. Bereich)
und dann die contents von den Treffern (ggf. Schleife) mit dem Summenergebnis der Tabelle füllen.


als Antwort auf: [#470886]
(Dieser Beitrag wurde von Martin Fischer am 9. Mai 2011, 08:20 geändert)

Indesign, Tabellen und Zahlen

technikfreak
Beiträge gesamt: 4

9. Mai 2011, 19:06
Beitrag # 16 von 46
Beitrag ID: #471005
Bewertung:
(12639 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für die schnelle Antwort!
Wenn ich ein fertiges Skript sehe, verstehe ich zwar was passiert, aber selbst erstellen klappt nicht ;-)

Also folgendes:
Ich habe meine erste Tabelle. Die ist aufgebaut in Spalten Position, Beschreibung, Anzahl, Einzelpreis, Anzahl*Einzelpreis. Dann werden auf der Rechnung oder dem Angebot die einzelnen Positionen aufgeführt. Als erstes soll das Skript anhand der Anzahl und des Einzelpreises die jeweiligen Zwischensummen errechnen.

Dann habe ich noch einmal eine zweite Tabelle. Diese beinhaltet die Spalten Zwischensumme, Netto, Mwst. und Gesamtsumme. Das Problem, warum das bereits vorhandene Skript nicht funktioniert ist, dass ich die Felder in der Wagerechten angeordnet habe. Jetzt dachte ich mir, wenn ich Zeichenformate vergebe wäre das am einfachsten, auch wenn ich nachträglich mal den Stand der Werte verändern will.

Also im zweiten Teil soll das Skript dann die ganzen Zwischensummen der Positionen zusammenrechnen und mir die Werte dementsprechend unten eintragen.

Vielen Dank schon mal im Vorraus!
Liebe Grüße
Julian


als Antwort auf: [#470914]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

9. Mai 2011, 20:32
Beitrag # 17 von 46
Beitrag ID: #471007
Bewertung:
(12626 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

ich habe noch keine klare Vorstellung von Deinen Tabellen und Ihrer Struktur.


als Antwort auf: [#471005]

Indesign, Tabellen und Zahlen

Yves Apel
Beiträge gesamt: 1724

9. Mai 2011, 22:06
Beitrag # 18 von 46
Beitrag ID: #471013
Bewertung:
(12605 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

wenn du Formelberechnungen in InDesign haben möchtest kann ein Blick auf DTPTools Active Tables nicht schaden.


als Antwort auf: [#471005]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

9. Mai 2011, 22:25
Beitrag # 19 von 46
Beitrag ID: #471015
Bewertung:
(12594 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Yves,

ist DTPTools Active Tables in der Lage, Berechnungen aus einer Tabelle in eine andere zu übertragen und dort weitere Berechnungen durchzuführen?

Ah ja.
Das geht.
Per Copy & Paste:
Zitat Formulas are not limited to work with data within one table, so you can just copy/paste your price-list table on the pasteboard making sure all prices in your catalog are up to date.


Guter Hinweis!
Das wär was für Julian.


als Antwort auf: [#471013]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

10. Mai 2011, 08:00
Beitrag # 20 von 46
Beitrag ID: #471022
Bewertung:
(12556 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Yves,

inzwischen habe ich mir Active Tables genauer angesehen.
Dieses Plugin ist genial.

Unterstützt detaillierte Zahlenformatierungen (Dezimaltrennzeichen, führende Nullen, Währungen, ggf. autom. Zeichenformate für positive/negative Ergebnisse).

Die Formeln zur Berechnung lassen spontan keine Wünsche offen.

Über die drei Paletten 'Formulas', 'Tables', 'Names' behält man die Übersicht über verwendete Berechnungsformeln, Tabellen und Namen selbst definierter Formeln.

Bei Änderungen der den Berechnungen zugrundeliegenden Werte werden Berechnungen in den dafür vorgesehenen Zellen (auch außerhalb der Tabelle, in welchen die Werte stehen) sofort ausgeführt.

Ergebnisse aus Tabellen können über die Adressierung der entsprechenden Zelle in den Text übernommen werden. Auch Formeln mit Bezug auf Tabellen können in den normalen Text eingefügt werden.

Die Tabellen erhalten automatisch einen Namen mit fortlaufender Nummerierung. Dieser Name kann nach eigenem Bedarf editiert werden.

Tabellen lassen sich nach unterschiedlichen Kriterien sortieren.

Beim Arbeiten in der Tabelle unterstützten on the fly Koordinatenbezeichnungen um die Tabelle herum bei der Adressierung der einzelnen Zellen.

u.v.m.

Leider ist der Abbrechen-Button für die dt. Sprache etwas zu klein geraten und deswegen beschnitten.



Und wenn ich mich recht entsinne, bezahlt der Anwender bei DTPTools für das Plugin nur einmal und erhält dann die Updates für neue Versionen von InDesign kostenlos.


als Antwort auf: [#471015]
(Dieser Beitrag wurde von Martin Fischer am 10. Mai 2011, 09:00 geändert)

Indesign, Tabellen und Zahlen

technikfreak
Beiträge gesamt: 4

13. Mai 2011, 01:58
Beitrag # 21 von 46
Beitrag ID: #471372
Bewertung:
(12499 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

sorry war bisschen im Stress und hatte keine Zeit zu Antworten. Das Plugin sieht super aus, aber da ich es nur für diesen einen Zweck bräuchte, doch ein bisschen zu teuer.

Ich habe hier mal einen Link mit einem Screenshot, wie meine Tabelle aufgebaut ist:http://imageshack.us/photo/my-images/823/bildschirmfoto20110513u.png/

Der Ablauf des Scripts:
1. Multiplizieren der Einzelpreise mit der Menge und eintragen unter Summe der jeweiligen Zeile
2. Errechnen der Gesamtsumme aller Summen der einzelnen Positionen
3. Errechnen der Mwst von 19% und errechnen des Nettopreises + Mwst
4. Eintragen der verschiedenen Ergebnise in die 2. Tabelle. Identifikation der Position wo der jeweilige Wert eingetragen werden soll über Zeichenformate

Ich hoffe mein Wunsch ist jetzt besser verständlich! :-)

Liebe Grüße und vielen Dank im Vorraus!
Julian


als Antwort auf: [#471022]

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

22. Mai 2011, 15:49
Beitrag # 22 von 46
Beitrag ID: #472064
Bewertung:
(12324 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ soapboxdesign ] guten Tag zusammen,

ich bin beim Suchen nach einer Lösung zum Rechnen mit InDesign über diese Lösung gefallen. Funktioniert toll, ich habe das Ganze ein wenig erweitert und an meine Bedürfnisse angepasst.

Das Script multipliziert jetzt zusätzlich die Tabellenfelder Stunden und Netto und rechnet die Endsummen aller Positionen untereinander auf, wie von Martin Fischer so elegant gelöst.

Mein Problem ist gerade, dass bei der Eingabe nur Kommazahlen mit Punkt akzeptiert werden, bei einem Komma als Dezimaltrennzeichen wird NaN ausgegeben.
Kann mir hier bitte jemand auf die Sprünge helfen? Ich komme mit meinen Kenntnissen hier nicht so recht weiter ...

Hier mein Code:
Code
 
// simpleBilling.jsx

var MWST = 16/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(3).contents;
var myNetto = myTable.columns.item(4).contents;
var mySum = 0;
var myPrice = 0;
for (k = 0; k < myLastRow-2; k++) {

myPrice = (((myTable.columns.item(3).cells[k].contents))*((myTable.columns.item(4).cells[k].contents)));

myTable.columns.item(3).cells[k].contents = digitFormatter(myTable.columns.item(3).cells[k].contents);
myTable.columns.item(4).cells[k].contents = digitFormatter(myTable.columns.item(4).cells[k].contents);

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " EUR";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " EUR";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " EUR";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " EUR";
}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}


Dennis Wehrmann


Hallo Dennis,

hast du dein Skript mittlerweile zum Laufen gebracht? Es ist genau das, was ich suche, nur scheint es bei mir nicht so ganz zu funktionieren ... Kannst du einen Screenshot deiner Tabelle posten, sodass man sehen kann welche Zellen wie genutzt sind?

Vielen Dank und liebe Grüße
Carola


als Antwort auf: [#433089]

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

22. Mai 2011, 16:06
Beitrag # 23 von 46
Beitrag ID: #472065
Bewertung:
(12315 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also so soll meine Tabelle aussehen:http://www.pixelgeizer.de/tabelle/rg_jsx.jpg Die rosa markierten Felder sollen automatisch errechnet werden. Allerdings muss es so variabel sein, dass die Tabelle statt der zwei Positionen auch mehrere oder nur eine haben kann.

Leider bin ich was das Skripten angeht Anfänger, kann aber die Skripte größtenteils schon nachvollziehen.

Vielen Dank für eure Hilfe!


als Antwort auf: [#472064]

Indesign, Tabellen und Zahlen

technikfreak
Beiträge gesamt: 4

31. Mai 2011, 09:47
Beitrag # 24 von 46
Beitrag ID: #472717
Bewertung:
(12096 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kann man noch eine Antwort erwarten? :-)

Liebe Grüße
Julian


als Antwort auf: [#472065]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

31. Mai 2011, 11:18
Beitrag # 25 von 46
Beitrag ID: #472737
Bewertung:
(12075 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

Antwort auf: Das Plugin sieht super aus, aber da ich es nur für diesen einen Zweck bräuchte, doch ein bisschen zu teuer.


Meinst Du, die Individualanfertigung eines Skripts, das an ganz bestimmte Ausgangsbedingungen gebunden ist, käme günstiger?
(Wenn ja, für Dich oder den Programmierer?)

Ist das Plugin mit $ 59 zu teuer, dann wird der damit verbundene Nutzen wohl auch nicht besonders hoch eingeschätzt und die Aufgabe kann mit dem Taschenrechner in der Hand erledigt werden.

Gerne unterstütze ich Dich beim Skriptenlernen, wenn Du eine entsprechende Bereitschaft erkennen lässt.
Aber auf Grund der Tatsache, dass es für die genannte Aufgabe bereits eine flexible Lösung in Form des Plugins ActiveTables gibt, ist mir meine Zeit für die Entwicklung eines individuellen Skripts zu kostbar.


als Antwort auf: [#472717]
(Dieser Beitrag wurde von Martin Fischer am 31. Mai 2011, 11:21 geändert)

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

31. Mai 2011, 11:31
Beitrag # 26 von 46
Beitrag ID: #472739
Bewertung:
(12062 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ olachen ] Also so soll meine Tabelle aussehen:http://www.pixelgeizer.de/tabelle/rg_jsx.jpg Die rosa markierten Felder sollen automatisch errechnet werden. Allerdings muss es so variabel sein, dass die Tabelle statt der zwei Positionen auch mehrere oder nur eine haben kann.

Leider bin ich was das Skripten angeht Anfänger, kann aber die Skripte größtenteils schon nachvollziehen.

Vielen Dank für eure Hilfe!


Also, ich habe mir das Buch "InDesign mit JavaScript automatisieren" nun für 2 Euro auf Amazon bestellt und auch schon halb durch - gelesen und probiert. Gar nicht so schwer zu verstehen! Lohnt sich echt!

Sobald ich also eine Lösung für meine variable Rechnungstabelle gefunden habe, werde ich sie gerne hier bereitstellen.

Bis dahin liebe Grüße
Carola


als Antwort auf: [#472065]

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

31. Mai 2011, 15:07
Beitrag # 27 von 46
Beitrag ID: #472772
Bewertung:
(12019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich habe nun mithilfe des tollen Buches mein Skript zu dieser Tabelle: http://www.pixelgeizer.de/tabelle/rg_jsx.jpg soweit am laufen, nur weiß ich nun nicht, ob alles auch gut gelöst ist.

Ich habe auf das Skript von Dennis aufgebaut - verstehe aber zum beispiel gar nicht, wozu ich die Variablen myStunden und myNetto definiere, obwohl ich sie unten dann nirgends mehr verwende.

Weiter verstehe ich noch nicht ganz was digitFormatter macht. Kannst du das erklären?

Außerdem möchte ich noch als letzten Schritt den Stundensätzen in Spalte 3 ein Leerzeichen und das €-Zeichen hinzufügen.
Das Skript ist ja so angelegt, dass man erstmal in die Felder "Anzahl" und "Stundensatz" nur Zahlen mit Komma einfügt ohne €-Zeichen.

Wie kann ich das Lösen, sodass das Skript auch bei mehrmaligem Abspielen noch funktioniert? Bei dem unteren Teil, der Summe im Skript von dir funktioniert das ja.

Hier mein Skript:

Code
// simpleBilling.jsx     

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(1).contents;
var myNetto = myTable.columns.item(2).contents;
var mySum = 0;
var myPrice = 0;
for (k = 1; k < myLastRow-2; k++) {

myPrice = ((myTable.columns.item(1).cells[k].contents.replace(",", "."))*(myTable.columns.item(2).cells[k].contents.replace(",", ".")));

myTable.columns.item(1).cells[k].contents.replace(".", ",");
myTable.columns.item(2).cells[k].contents.replace(".", ",");

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " €";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " €";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " €";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " €";
}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}


Vielen Dank und beste Grüße
Carola


als Antwort auf: [#472739]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

31. Mai 2011, 17:33
Beitrag # 28 von 46
Beitrag ID: #472786
Bewertung:
(11995 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Carola,

wenn's läuft, soll's erst mal recht sein.

Darüberhinaus kann ich mich frühestens nach meinem Urlaub mit der Sache intensiver beschäftigen.


als Antwort auf: [#472772]

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

31. Mai 2011, 17:38
Beitrag # 29 von 46
Beitrag ID: #472788
Bewertung:
(11991 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für die Rückmeldung - ich wünsche dir einen erholsamen Urlaub!

Vielleicht schaffe ich es ja auch selbst noch, die Lösung zu finden ... wenn man sich erstmal eingelesen hat, macht das skripten Lust auf mehr!
Die Rezensionen zu dem Buch, das du übersetzt hast haben nicht zuviel versprochen. Es ist alles logisch erklärt und vorallem nachvollziehbar.

Grüße
Carola


als Antwort auf: [#472786]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

31. Mai 2011, 17:58
Beitrag # 30 von 46
Beitrag ID: #472791
Bewertung:
(11984 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Carola,

danke für die Blumen.

Allerdings ist das von mir übersetzte Büchlein inzwischen völlig veraltet (bezieht sich auf InDesign CS2 und CS3) und wird zu Recht für 2 € verramscht.

Das – nicht übersetzte – Nachfolgewerk von Peter Kahrel: Scripting InDesign CS3/4 with JavaScript.


Inzwischen gibt es aber auch ein umfangreicheres, tiefer und weiter gehendes Buch zum Skripten (in deutscher Ausgangssprache) von Gregor Fellenz: InDesign automatisieren.


als Antwort auf: [#472788]
(Dieser Beitrag wurde von Martin Fischer am 31. Mai 2011, 18:05 geändert)

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

31. Mai 2011, 22:41
Beitrag # 31 von 46
Beitrag ID: #472818
Bewertung:
(12470 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Allerdings ist das von mir übersetzte Büchlein inzwischen völlig veraltet (bezieht sich auf InDesign CS2 und CS3) und wird zu Recht für 2 € verramscht.


Haha, fürs grundsätzliche Verständnis wars jedenfalls geeignet. Außerdem arbeite ich zuhause noch mit meiner Studentenversion CS2 - Upgrade auf 5.5 ist aber demnächst fällig :-)

Hier jetzt mal noch eine Frage in die Runde:
ich möchte meinem Stundensatz nach den Berechnungen noch ein Leer- und ein €-Zeichen hinzufügen. Allerdings muss vorher abgefragt werden, ob nicht schon ein €-Zeichen das letzte Zeichen des Zellinhaltes ist.
Also, falls ich irgendwo etwas ändere in der Tabelle und das Skript nochmal laufen lasse. Sonst würde es ja dann so aussehen: 50,00 € € usw. je nachdem, wie oft ...
Weiß jemand, wie ich das letzte Zeichen meines Zellinhaltes ansprechen kann? Ich habe mal sowas probiert, das tut aber nicht:

Code
if( myTable.columns.item(2).cells[k].contents.characters[-1] != '€' ) 
myTable.columns.item(2).cells[k].contents + ' €';


Kann mir jemand auf die Sprünge helfen?

Grüße
Carola


als Antwort auf: [#472791]
(Dieser Beitrag wurde von olachen am 31. Mai 2011, 22:43 geändert)

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

1. Jun 2011, 07:34
Beitrag # 32 von 46
Beitrag ID: #472830
Bewertung:
(12451 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Carola,

Du musst den Inhalt des letzten Zeichens der entsprechenden Zellen prüfen, nicht die letzten Zeichen des Inhalts (contents). contents ist ein String-Objekt und kennt seinerseits keine character-Objekte als Kinder.

In der zweiten Zeile fehlt außerdem der Zuweisungsoperator '='.

Dein Code muss also in etwa so aussehen:
Code
if( myTable.columns.item(2).cells.item(k).characters.lastItem().contents != '€' )  
myTable.columns.item(2).cells.item(k).insertionPoints.lastItem().contents = ' €';


Die Abfrage spukt dann einen Fehler aus, wenn in der angesprochenen Zelle gar kein Zeichen ist, das geprüft werden könnte. Konsequenterweise müsste also eine Prüfung vorgeschaltet werden, ob überhaupt ein Zeichen vorhanden ist.

Code
if( myTable.columns.item(2).cells.item(k).characters.length > 0 && myTable.columns.item(2).cells.item(k).characters.lastItem().contents != '€' )   
myTable.columns.item(2).cells.item(k).insertionPoints.lastItem().contents = ' €';



als Antwort auf: [#472818]

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

1. Jun 2011, 09:51
Beitrag # 33 von 46
Beitrag ID: #472842
Bewertung:
(12426 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

also so funktioniert es jetzt:
Code
// simpleBilling.jsx     

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(1).contents;
var myNetto = myTable.columns.item(2).contents;
var mySum = 0;
var myPrice = 0;
for (k = 1; k < myLastRow-2; k++) {

myPrice = ((myTable.columns.item(1).cells[k].contents.replace(",", "."))*(myTable.columns.item(2).cells[k].contents.replace(",", ".")));

myTable.columns.item(1).cells[k].contents.replace(".", ",");
myTable.columns.item(2).cells[k].contents.replace(".", ",");

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " €";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

if( myTable.columns.item(2).cells[k].characters.lastItem().contents != '€' )
myTable.columns.item(2).cells[k].insertionPoints.lastItem().contents = ' €';

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " €";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " €";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " €";

}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



Die Überprüfung, ob überhaupt ein Zeichen in der Zelle ist, habe ich noch nicht eingebaut.

Grüße
Carola


als Antwort auf: [#472830]

Indesign, Tabellen und Zahlen

olachen
Beiträge gesamt: 20

1. Jun 2011, 13:57
Beitrag # 34 von 46
Beitrag ID: #472877
Bewertung:
(12393 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
so, hier endgültig mit Überprüfung der Zellen und ohne unnötige Variablen:

Code
// simpleBilling.jsx      

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var mySum = 0;
var myPrice = 0;
for (k = 1; k < myLastRow-2; k++) {

myPrice = ((myTable.columns.item(1).cells[k].contents.replace(",", "."))*(myTable.columns.item(2).cells[k].contents.replace(",", ".")));

myTable.columns.item(1).cells[k].contents.replace(".", ",");
myTable.columns.item(2).cells[k].contents.replace(".", ",");

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " €";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

if( myTable.columns.item(2).cells.item(k).characters.length > 0 && myTable.columns.item(2).cells[k].characters.lastItem().contents != '€' )
myTable.columns.item(2).cells[k].insertionPoints.lastItem().contents = ' €';

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " €";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " €";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " €";

}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



als Antwort auf: [#472842]

Indesign, Tabellen und Zahlen

foxpalace
Beiträge gesamt: 77

1. Jun 2011, 18:56
Beitrag # 35 von 46
Beitrag ID: #472905
Bewertung:
(12362 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Inzwischen gibt es aber auch ein umfangreicheres, tiefer und weiter gehendes Buch zum Skripten (in deutscher Ausgangssprache) von Gregor Fellenz: InDesign automatisieren.



Hallo Martin,

danke für diesen Tipp -> bestellt :)

Gruß
Michael


als Antwort auf: [#472791]

Indesign, Tabellen und Zahlen

aostin
Beiträge gesamt: 1

20. Okt 2011, 18:31
Beitrag # 36 von 46
Beitrag ID: #482743
Bewertung:
(12012 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zusammen,

danke für das Skript, hatte leider ein paar Probleme mit im Indesign CS5 damit (man konnte eine Tabelle nur einmal berechnen lassen, beim zweiten mal funktionierte das Skript nicht mehr).

Habe das Skript adaptiert, damit die Typenumwandlungen von Text auf Zahl und Zurück richtig funktionieren.

In den ersten beiden Zellen lässt sich angeben welche Spalten miteinander multipliziert werden sollen, das Ergebnis landet wie bisher in der letzten Spalte:

Code
// simpleBilling.jsx     

var columnStunden=4;
var columnNetto=5;
var MWST = 20/100;

if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = 0;
var myNetto = 0;

var mySum = 0;
var myPrice = 0;

for (k = 0; k < myLastRow-2; k++) {

myStunden = parseFloat(String(myTable.columns.item(columnStunden-1).cells[k].contents.replace(",", ".") ));
myNetto = parseFloat(String(myTable.columns.item(columnNetto-1).cells[k].contents).replace(",", ".") );

myPrice = (myStunden*myNetto);

myTable.columns.item(columnStunden-1).cells[k].contents = digitFormatter(myStunden);
myTable.columns.item(columnNetto-1).cells[k].contents = digitFormatter(myNetto);

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " EUR";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " EUR";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " EUR";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " EUR";
}


function digitFormatter(x) {
return String(Number(x).toFixed(2)).replace(".", ",");
}


Hoffe es kann jemand brauchen :)


als Antwort auf: [#472905]

Indesign, Tabellen und Zahlen

zahnrad
Beiträge gesamt: 1

13. Dez 2011, 17:26
Beitrag # 37 von 46
Beitrag ID: #486263
Bewertung:
(11789 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Na, da will ich mal ein bißchen nachhelfen:
Code
// simpleBilling.jsx   

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var mySum = 0;
for (k = 0; k < myLastRow-2; k++) {
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1
}
myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum);
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST);
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum);
}

function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



Hallo Scripter,
ich habe mich vor ein paar Jahren angemeldet und gestern wieder mal Vieles durchstöbert. Ich bin echt angetan von der vielen Hilfe, die hier gegeben wird. Dafür möchte ich mich bedanken (habe einige Scripte gezogen).
Ich selbst habe von JavaScript keine Ahnung. Aber Wünsche habe ich dennoch ;-).

Kann man bei dem Script von Martin Fischer am Ende einen Tausenderpunkt, und bei Zahlen ohne Kommastellen folgende Zeichen ",–" einfügen?
Damit man, wenn die Rechnung korrigiert wird, das Script nochmal anwenden kann, müssten diese Zeichen aber am Anfang rausgenommen werden.
Wenn dies nur ganz wenig Aufwand ist, würde ich mich darüber freuen.
(Mir ist aufgefallen, dass wenn in einer Zelle 2 Zahlen stehen, nur die obere mitgerechnet wird.)
Norbert


als Antwort auf: [#254925]

Indesign, Tabellen und Zahlen

marianarlt
Beiträge gesamt: 1

9. Mai 2012, 20:44
Beitrag # 38 von 46
Beitrag ID: #494692
Bewertung:
(11101 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo alle zusammen,

ich bin über diesen wundervollen Thread gestolpert und natürlich gibts diverse Möglichkeiten Eure großartigen Ansätze noch erweitert haben zu wollen. Selbstverständlich sind komplexe Ansätze anderen Scripts zu überlassen, finde das Active Tables eine spannende Lösung für Kunden mit extremen Rechenprojekten.

Mein Anliegen ist eigentlich recht simpel denke ich, allerdings wars mir auch mit allen Tutorials und der Hilfe des Objektmodell-Viewers vom ExtendedScript Toolkit nicht möglich herauszufinden wie ich aus meiner Spalte "myLastCol" mit den ausgerechneten Stunden*Stundensatz nur ganz bestimmte Zellen zusammenrechne lasse für den Gesamtbetrag.

Ich dachte die einfachste Art wäre dieser bestimmten Zelle einen Zellenstil zuzuweisen und dann mit .appliedCellStyle nach ihr zu suchen. Aber das erweist sich als relativ kompliziert.

Gibt es nicht eine sehr schlichte Möglichkeit aus der letzten Spalte bestimmt formatierte Zellen zu greifen?
Zum Beispiel indem man den folgenden Teil nach .cells noch etwas weiterdefiniert. Also so etwas wie .cells[nurZellenMitZellenformat = "meinZellenFormat"]?

Code
myTable.columns[myLastCol].cells[k].contents  = digitFormatter(myPrice) + " EUR"; 


Für jeden noch so kleinen Denkanstoß wäre ich unglaublich dankbar, mein Kopf schmerzt nach soviel trial&error mit expressions mit denen man sich nicht auskennt und die für Anfänger auch nur ziemlich schlecht beschrieben sind (im Objektmodell-Viewer oder auf etlichen Webseiten).

Ganz liebe Grüße

Marian


als Antwort auf: [#482743]

Indesign, Tabellen und Zahlen

deeda
Beiträge gesamt: 11

13. Jan 2014, 02:26
Beitrag # 39 von 46
Beitrag ID: #521950
Bewertung:
(9082 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

wow, das ist ja ein cooles Skript. Fast (!) das was ich gesucht habe. Eine Sache fehlt mir noch... Ich brauche ein Zwischending aus:

Code
// simpleBilling.jsx    

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var mySum = 0;
for (k = 0; k < myLastRow-2; k++) {
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1
}
myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum);
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST);
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum);
}

function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}


und

Code
// simpleBilling.jsx      

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(1).contents;
var myNetto = myTable.columns.item(2).contents;
var mySum = 0;
var myPrice = 0;
for (k = 1; k < myLastRow-2; k++) {

myPrice = ((myTable.columns.item(1).cells[k].contents.replace(",", "."))*(myTable.columns.item(2).cells[k].contents.replace(",", ".")));

myTable.columns.item(1).cells[k].contents.replace(".", ",");
myTable.columns.item(2).cells[k].contents.replace(".", ",");

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice);
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1 ;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum);
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST);
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum);
}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}


Bei dem ersten Code kann ich alle Beträge untereinander ganz einfach addieren und habe darunter auch dann noch die Mwst und den Bruttobetrag. Hier kann ich auch eine Zeile mit "-50" eingeben und er subtrahiert diesen Wert auch (bei Rabatten zB). Allerdings funktioniert das Skript nicht, wenn die Kopfzeile Bezeichnungen hat wie Betrag z. B.!

Bei dem zweiten Code kann ich in der Kopfzeile auch Stunden, Stundensatz und Betrag stehen haben. Stunden*Stundensatz ergeben dann den einzelnenBetrag, die Beträge werden addiert und unten fein netto, mwst, brutto. Genauso will ich das auch, allerdings habe ich hier keine Möglichkeit in einer Zeile Stunde und Stundensatz leer zu lassen und im Betrag zB "-50" einzugeben, sodass ich eine Rabattposition dazwischen schiebe.

Im Prinzip brauche ich das zweite Skript mit der Möglichkeit einen negativen Betrag auch einzugeben, der subtrahiert wird.

Ich kenne mich mit skripten gar nicht aus, könnt ihr mir helfen oder sagen was ich in den Code einfügen muss?


als Antwort auf: [#494692]

Indesign, Tabellen und Zahlen

deeda
Beiträge gesamt: 11

13. Jan 2014, 04:12
Beitrag # 40 von 46
Beitrag ID: #521951
Bewertung:
(9059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Den Beitrag hiervor bitte vergessen, ich kann ihn leider nicht editieren oder löschen.

Hier meinen aktuellen Code:
Code
// simpleBilling.jsx      

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(1).contents;
var myNetto = myTable.columns.item(2).contents;
var mySum = 0;
var myPrice = 0;
for (k = 1; k < myLastRow-2; k++) {
myPrice = ((myTable.columns.item(1).cells[k].contents.replace(",", "."))*(myTable.columns.item(2).cells[k].contents.replace(",", ".")));

myTable.columns.item(1).cells[k].contents.replace(".", ",");
myTable.columns.item(2).cells[k].contents.replace(".", ",");

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " g";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " h";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " h";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " h";
}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}


So ist das Skript fast perfekt. Ich habe drei Spalten (Stunden, Netto, Betrag) und gebe immer z.B. "4" (Stunden) und "100" (Netto) ein. Die Beträge werden mit dem Eurozeichen alle ausgegeben und klasse addiert, sodass ich netto, mwst und brutto am Ende habe.

Mein einzigen Wünsche noch:

1.
Ich würde gerne, dass den Einträgen in der Nettospalte noch das Eurozeichen automatisch hinzugefügt wird, sodass meine "100" zu "100 Eurozeichen" korrigiert wird. In dem Fall weiß ich nicht wo "+ g" (g steht für das Eurozeichen) einfügen soll oder wie die Skriptzeile heißen muss...

2.
Es müssten auch Zeilen mit Rabatten mögllich werden.

ENTWEDER:
Skript weiß, wenn in der Netto-Spalte das Wort "X % Rabatt" vorkommt, wird der Betrag wie folgt berechnet: Betrag der Zeile darüber/100*Rabatt und dabei ist der Rabatt im Skript einfach fest hinterlegt.
Dieser Betrag wäre dann negativ und müsste dann subtrahiert werden können bzw. es müsste +(-999 Euro) funktionieren beim addieren der Beträge.

ODER SONST AUCH:
Stunden "nichts" / Netto "nichts" / im Betrag der ausgerechnete Betrag "-999" (wenn das zu umstädnlich ist, wäre der Umweg auch okay, dass der negative Betrag aus der Nettozeile übernommen wird und ich ihn manuell dann wieder lösche).
Auch hier müsste das subtrahieren bei den Beträgen funktionieren.

Könnt ihr mir helfen beim abwandeln des Codes? Das wäre das perfekte Skript :-)


als Antwort auf: [#521950]
(Dieser Beitrag wurde von deeda am 13. Jan 2014, 04:28 geändert)

Indesign, Tabellen und Zahlen

deeda
Beiträge gesamt: 11

13. Jan 2014, 04:33
Beitrag # 41 von 46
Beitrag ID: #521952
Bewertung:
(9057 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Richtig cool noch:

Es wäre cool, wenn Stunden, Netto und Betrag nicht ausgefüllt wird, dass im Betrag nicht 0,00 Euro ausgerechnet wird, dass ich es nicht löschen muss (in der ganz linken Spalte ist bei mir noch manchmal Text).


als Antwort auf: [#521951]

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

13. Jan 2014, 10:39
Beitrag # 42 von 46
Beitrag ID: #521971
Bewertung:
(8995 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo deeda,

ich finde gerade keine Zeit, das Skript zu überarbeiten.

Aber wenn Du dem Forum oder mir eine IDML-Datei mit einer Beispieltabelle, aus der die Anforderung hervorgeht, zur Verfügung stellst (am besten 'vorher - nachher'), dann kann ich mir das heute Abend mal genauer ansehen und das Skript vielleicht entsprechend überarbeiten.


als Antwort auf: [#521951]
(Dieser Beitrag wurde von Martin Fischer am 13. Jan 2014, 10:40 geändert)

Indesign, Tabellen und Zahlen

deeda
Beiträge gesamt: 11

13. Jan 2014, 15:53
Beitrag # 43 von 46
Beitrag ID: #521991
Bewertung:
(8940 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Hallo deeda,

ich finde gerade keine Zeit, das Skript zu überarbeiten.

Aber wenn Du dem Forum oder mir eine IDML-Datei mit einer Beispieltabelle, aus der die Anforderung hervorgeht, zur Verfügung stellst (am besten 'vorher - nachher'), dann kann ich mir das heute Abend mal genauer ansehen und das Skript vielleicht entsprechend überarbeiten.


Das wäre genial! Ich habe eben mal alles vorbereitet. Eine Vorher-Tabelle und eine Nachher-Tabelle und dazu noch einmal die Punkte direkt im Dokument, damit man es versteht. Macht echt Spaß in Indesign solche Dinge zu machen, auch wenn der Aufwand manchmal riesig ist :-)

Können Sie mir ihre Mail schicken, damit ich Ihnen das Dokument schicken kann? Ich kann hier die IDML leider nicht hochladen.

Hier nochmal die Basis des aktuellen Skripts, was schon gut funktioniert:
Code
// simpleBilling.jsx      

var MWST = 19/100;
if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var myStunden = myTable.columns.item(1).contents;
var myNetto = myTable.columns.item(2).contents;
var mySum = 0;
var myPrice = 0;
for (k = 1; k < myLastRow-2; k++) {
myPrice = ((myTable.columns.item(1).cells[k].contents.replace(",", "."))*(myTable.columns.item(2).cells[k].contents.replace(",", ".")));

myTable.columns.item(1).cells[k].contents.replace(".", ",");
myTable.columns.item(2).cells[k].contents.replace(".", ",");

myTable.columns[myLastCol].cells[k].contents = digitFormatter(myPrice) + " g";
mySum += (myTable.columns[myLastCol].cells[k].contents.replace(",", "."))*1;

}

myTable.columns[myLastCol].cells[myLastRow-2].contents = digitFormatter(mySum) + " h";
myTable.columns[myLastCol].cells[myLastRow-1].contents = digitFormatter(mySum*MWST) + " h";
myTable.columns[myLastCol].cells[myLastRow].contents = digitFormatter(mySum*MWST + mySum) + " h";
}


function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



als Antwort auf: [#521971]
(Dieser Beitrag wurde von deeda am 13. Jan 2014, 15:57 geändert)

Indesign, Tabellen und Zahlen

Martin Fischer
  
Beiträge gesamt: 12783

13. Jan 2014, 16:08
Beitrag # 44 von 46
Beitrag ID: #521993
Bewertung:
(8931 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Können Sie mir ihre Mail schicken, damit ich Ihnen das Dokument schicken kann? Ich kann hier die IDML leider nicht hochladen.


Die email-Adresse steckt in meinem Profil.


als Antwort auf: [#521991]

Indesign, Tabellen und Zahlen

deeda
Beiträge gesamt: 11

13. Jan 2014, 16:15
Beitrag # 45 von 46
Beitrag ID: #521994
Bewertung:
(8926 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
E-Mail kommt!


als Antwort auf: [#521993]

Indesign, Tabellen und Zahlen

AndiS
Beiträge gesamt: 1

19. Jan 2015, 18:28
Beitrag # 46 von 46
Beitrag ID: #536093
Bewertung:
(4889 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Anbei mal meine Version für das Berechnen des Gesamtbetrages einer Rechnung in InDesign auf Grundlage des Nettobetrages. Die MwSt. kann im InDesign Dokument beliebig angepasst werden. Auch müssen die Zahlen nicht in eine Spalte untereinander stehen.


Code
// simpleBilling.js 


if (app.selection[0].parent.constructor.name == "Cell"){
var myTable = app.selection[0].parent.parent;
var MWSTFeld = myTable.columns[1].cells[1].contents;
var MWST = MWSTFeld/100;

var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;
var mySum = (myTable.columns[2].cells[0].contents.replace(",", "."))*1;

myTable.columns[2].cells[1].contents = digitFormatter(mySum*MWST) + " EUR";
myTable.columns[2].cells[4].contents = digitFormatter(mySum*MWST + mySum) + " EUR";
}

function digitFormatter(x) {
// Quelle: http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden#6
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.') == -1)? '.00' : '00';
var p = k.indexOf('.');
return k.substring(0, p) + ',' + k.substring(p+1, p+3);
}



als Antwort auf: [#254925]
X

Aktuell

Farbmanagement
impressed_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
18.06.2024

Online
Dienstag, 18. Juni 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow