[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Tabelle für Leistungsverzeichnis und Angebote

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

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

7. Jul 2015, 09:51
Beitrag # 1 von 27
Bewertung:
(6059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

nach intensiver Suche im Internet und im Forum erstelle ich nun doch einen neuen Thread in der Hoffnung, dass auch andere vor diesem Problem stehen.

Wir müssen oft Leistungsverzeichnisse oder Angebote erstellen mit mehreren Positionen. Eine AVA-Software lohnt sich aber bei weitem nicht und ist uns auch zu unflexibel.
Mit der Software GrandTotal2 habe ich mich ein paar Wochen lang herumgeschlagen, bin aber zu keinem befriedigenden Ergebnis gekommen.
Prinzipiell soll es aber in die Richtung gehen.

Die Idee ist, in inDesign (CS5 für Mac) eine Tabelle zu erstellen, die (per Script) die einfachen Berechnungen ausführt.

Das wurde hier schon einigermaßen ausführlich besprochen:
http://www.hilfdirselbst.ch/..._reply;so=ASC;mh=15;

Ein paar Punkte fehlen mir dabei aber noch:
- Einfügen einer Kopfzeile/ Titelzeile, die nicht in die Berechnungen einbezogen wird.
- Untertitelzeilen in der Tabelle (z.B. Baustelleneinrichtung), die nur den Titel haben und keine Berechnung
- Zwischensummen, Summe der Positionen nach dem vorangehenden Untertitel
- Übertrag unten auf letzter Zeile vor Seitenumbruch mit Summe der Positionen auf der Seite. (Evtl. auch ausserhalb der Tabelle als separates Feld?!)
- Übertrag oben auf Folgeseite (entspricht Übertrag von Vorderseite) (Evtl. auch ausserhalb der Tabelle als separates Feld?!)
- Wiederholen der Kopfzeile nach Seitenumbruch (sollte mit den Tabellen-Bordmitteln gehen, oder?)
- Berechnung der Nettosumme anhand der Positionen oder der Zwischensummen (notfalls Halbierung der Gesamtsumme)
- Nettoeinheitspreis-Positionen, die nicht mitgerechnet werden in der Summe, sondern nur als NEP aufgeführt sind

Einige der Punkte kann man lösen in dem man das Script nur auf ein bestimmtes Format anspringen lässt. Leider habe ich das bisher nicht geschafft.

Im Scripten bin ich noch ein absoluter Neuling. Wenn also jemand eine gute Einführung in das Scripten (Schwerpunkt Berechnungen) hat, bitte verlinken.

Ich erstelle gleich mal eine Beispieltabelle, die ich hier hochlade. (Wenn es klappt) Dabei werde ich aber noch kein Script einfügen.

die fertige Datei kann ich dann auch hochladen und zur Verfügung stellen. Vielleicht hat ja auch jemand anders Bedarf.
Danke schonmal an alle die mithelfen.

MfG
Adrian

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)
X

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

7. Jul 2015, 11:04
Beitrag # 2 von 27
Beitrag ID: #541067
Bewertung:
(6010 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier noch die Beispieldatei in der dropbox:
https://www.dropbox.com/...eispiel_LV.indd?dl=0
Erstellt in CS5 für OS X.

Hochladen geht nicht, da ich den Anhang speichern soll, aber keinen Button dafür finde.

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541062]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

7. Jul 2015, 13:49
Beitrag # 3 von 27
Beitrag ID: #541083
Bewertung:
(5959 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier noch das schon leicht ergänzte Script von dem genannten Link.
Ich weiss nun aber nicht, an welcher Stelle ich definieren muss, dass nur die Zeilen mit dem Format "Position" angesprochen werden...

Code
// simpleBillingLV.js 

var columnMenge=3;
var columnEP=5;
var MWST = 19/100;
var myStyle = "Position";

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 myMenge = 0;
var myEP = 0;

var mySum = 0;
var myPrice = 0;

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

myMenge = parseFloat(String(myTable.columns.item(columnMenge-1).cells[k].contents.replace(",", ".") ));
myEP = parseFloat(String(myTable.columns.item(columnEP-1).cells[k].contents).replace(",", ".") );

myPrice = (myMenge*myEP);

myTable.columns.item(columnMenge-1).cells[k].contents = digitFormatter(myMenge);
myTable.columns.item(columnEP-1).cells[k].contents = digitFormatter(myEP);

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(".", ",");
}


Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541067]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

10. Aug 2015, 11:01
Beitrag # 4 von 27
Beitrag ID: #541864
Bewertung:
(5609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kann mir jemand bestätigen, dass einem (mehr) geholfen wird, wenn man Premium-Kunde ist?

PS: Das finde ich übrigens komplett ok, wenn es so wäre. Es ist leider nur sehr schwer abschätzbar, ob es sich dann wirklich lohnt, da man nicht weiss, wie viel Feedback man kriegt als Prem.-Member.

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541083]

Tabelle für Leistungsverzeichnis und Angebote

Kai Rübsamen
Beiträge gesamt: 4664

10. Aug 2015, 12:41
Beitrag # 5 von 27
Beitrag ID: #541873
Bewertung:
(5582 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich hab deinen Beitrag nur kurz überflogen, kann dir aber auf jeden Fall bestätigen, dass die Hilfe hier nicht von einer Mitgliedschaft abhängt. Wenn hier einer Lust hat, etwas zu schreiben, dann tut er das. Wenn nicht, dann nicht. Eigentlich ein einfaches Prinzip.

Trotzdem ist eine Mitgliedschaft sinnvoll! Du unterstützt damit das Forum (Wartung, Servergebühren usw.) und kannst dann auch Dateien usw. direkt hochladen.

Zu deinem Problem: Ich habe leider in dieser Woche keine Zeit. Solltest du bis nächste Woche keine Antwort erhalten, schreib mir eine PM und wird finden "vielleicht" eine Lösung.

Gruß Kai Rübsamen


als Antwort auf: [#541864]
(Dieser Beitrag wurde von Kai Rübsamen am 10. Aug 2015, 12:42 geändert)

Tabelle für Leistungsverzeichnis und Angebote

iduser
Beiträge gesamt: 107

10. Aug 2015, 14:00
Beitrag # 6 von 27
Beitrag ID: #541884
Bewertung:
(5561 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
Antwort auf: Ich weiss nun aber nicht, an welcher Stelle ich definieren muss, dass nur die Zeilen mit dem Format "Position" angesprochen werden...

Ich geh mal davon aus, dass du damit ein Zellenformat meinst. Die Zeile besitzt keine Eigenschaft "appliedCellStyle", jedoch eine einzelne Zelle.
Das kannst du hier sehen, vorausgesetzt man weis, dass die Eigenschaft "appliedCellStyle" ist. Ansonsten hilft nur suchen und Beschreibung durchlesen
http://jongware.mit.edu/idcs6js/pc_Row.html
http://jongware.mit.edu/idcs6js/pc_Cell.html

Nachfolgend ein Beispiel, wie du Zeilen herausfilterst, in denen die erste Zelle der Zeile das Zellenformat "Position" hast.

Code
// vollständige Tabelle muss markiert sein 
var _table = app.selection[0];

// durchlaufe alle Zeilen
for(var t=0; t<_table.rows.length; t++){
var _oneRow = _table.rows[t];
// wenn erste Zelle der jeweiligen Zeile das Zellformat "Position" besitzt, ...
if(_oneRow.cells[0].appliedCellStyle.name == "Position"){
// ... mach irgendetwas
}
}



Wenn die Voraussetzung nicht streng genug ist, müssen die anderen Zellen in der Zeile (mittels Schleife) auch geprüft werden.

Bezüglich deinem letzten Post, geb ich Kai vollkommen Recht. In der Regel werden die Beiträge recht schnell beantwortet. Je nach Komplexität, Häufigkeit (ggf. eine Ähnlichkeit zu einem anderen Problem) oder auch "Schwierigkeit" des gestellten Problems, kann es passieren, dass es etwas länger dauert, bis man eine oder im seltensten Fall keine Antwort bekommt. Als Beispiel hab ich Martin Fischer im Kopf, welcher auf Grund seines umfangreichen Wissens, für mich sehr herausfordernde Fragen stellt und sie manchmal auch selbst beantwortet, weil kein andere eine Lösung hat, bzw. er dann doch schneller war.

Philipp


als Antwort auf: [#541083]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

11. Aug 2015, 06:52
Beitrag # 7 von 27
Beitrag ID: #541900
Bewertung:
(5458 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Kai Rübsamen ] Wenn hier einer Lust hat, etwas zu schreiben, dann tut er das. Wenn nicht, dann nicht.


So kannte ich das bisher auch, bin aber über den Thread: Erweiterte Leistungen für PremiumMember und InDesign-User gestolpert.

Wenn ich wirklich nicht mehr weiter komme, melde ich mich. Hoffe aber es klappt irgendwie … :-) Danke!

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541873]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

11. Aug 2015, 06:59
Beitrag # 8 von 27
Beitrag ID: #541901
Bewertung:
(5454 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ iduser ] Nachfolgend ein Beispiel, wie du Zeilen herausfilterst, in denen die erste Zelle der Zeile das Zellenformat "Position" hast.

Code
// vollständige Tabelle muss markiert sein 
var _table = app.selection[0];

// durchlaufe alle Zeilen
for(var t=0; t<_table.rows.length; t++){
var _oneRow = _table.rows[t];
// wenn erste Zelle der jeweiligen Zeile das Zellformat "Position" besitzt, ...
if(_oneRow.cells[0].appliedCellStyle.name == "Position"){
// ... mach irgendetwas
}
}



Danke. Das sollte mir schon mal weiterhelfen. Die erste Zelle reicht dafür aus, da ich die Zellen über die Formate zeilenweise gleich einstelle. Ich versuche das ganze mal auf die letzte Zelle umzuschreiben.

Es wäre zuverlässiger, wenn ich vor dem Speichern jeweils zur Neuberechnung aufgefordert werde, ohne das die Tabelle markiert werden muss.
Dann habe ich beim Export immer die aktuellste Tabelle.
Mal schauen ob sich dazu was findet…

Danke schonmal.

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541884]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

11. Aug 2015, 14:02
Beitrag # 9 von 27
Beitrag ID: #541932
Bewertung:
(5267 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe nun mal angefangen den Code zusammenzutragen und poste ihn mal hier.
Wenn es zu chaotisch und unlogisch ist, bitte melden. Notfalls kann ich den Beitrag dann wieder entfernen um niemanden zu verwirren.

Wäre toll, über ein Feedback, ob ich auf dem richtigen Weg bin.

Das größte Problem sehe ich momentan noch darin, das die Tabelle markiert werden sollte. Suche nach einer Lösung, wo das nicht nötig ist. (Ganz am Anfang des Codes.)
Idealerweise wäre eine Aktualisierung der Tabelle beim Speichern der Datei.
Es wird immer nur eine Tabelle geben pro Datei. (Die Tabelle kann aber über mehrere Seiten führen)

Code
// LV_Berechnung.jsx 
// Script zur Berechnung einer Tabelle eines LV / Angebotes
// mit angepassten Auszügen aus einem Script von Martin Fischer http://www.hilfdirselbst.ch/foren/Zahlen_herauslesen_und_addieren_%28Script%29_P190598.html#190598
//
var myTab = ; // Tabelle ansprechen im Sinne von "app.activeDocument"

var MWST = 19/100;

// Initialisierung
// Definieren der Zeichenformate
//
var aktivePositionSum = 0
var aktivePositionCharStyleName = "aktivePosition"; // Zeichenformat aktive Position

var alternativPositionSum = 0
var alternativPositionCharStyleName = "alternativPosition"; // Zeichenformat alternative Position (NEP)

var zwischenSummeSum = 0
var zwischenSummeCharStyleName = "Zwischensumme"; // Zeichenformat Zwischensumme

var columnMenge = 3; // Mengen stehen in dritter Spalte
var columnEP = 5; // EP steht in fünfter Spalte
var columnGP = 6 // GP steht in sechster Spalte

// Multiplizierung der Menge mit EP, wenn Format = aktivePosition
// Funktioniert so noch nicht!

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

var mySum = 0;
var myPrice = 0;

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

myMenge = parseFloat(String(myTable.columns.item(columnMenge-1).cells[k].contents.replace(",", ".") ));
myEP = parseFloat(String(myTable.columns.item(columnEP-1).cells[k].contents).replace(",", ".") );

myPrice = (myMenge*myEP);

myTable.columns.item(columnMenge-1).cells[k].contents = digitFormatter(myMenge);
myTable.columns.item(columnEP-1).cells[k].contents = digitFormatter(myEP);

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

}

// folgende drei Zeilen werden noch nicht ausgeführt
// sollten die Zeilen ans Ende? Können die Zeilen in "Fusszeilen" in inDesign stehen?
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);
}

// Einsetzen "NEP" bei alternativPositionen (Code von iduser aus http://www.hilfdirselbst.ch/foren/Tabelle_f%FCr_Leistungsverzeichnis_und_Angebote_P541884.html#541884 )
// durchlaufe alle Zeilen
for(var t=0; t<_table.rows.length; t++){
var _oneRow = _table.rows[t];
// wenn erste Zelle der jeweiligen Zeile das Zellformat "alternativPosition" besitzt, soll in der letzten Spalte "NEP" stehen.
if(_oneRow.cells[0].appliedCellStyle.name == "alternativPosition"){
columnGP = "NEP" // kann so noch nicht funktionieren.
}
}

// Suche nach den Zahlen für die Zwischensumme
// Es soll aber nur bis zur letzten vorherigen Zwischensumme gerechnet werden! Also die Summe der Zeilen über der Zeile mit Format "zwischenSumme" bis zur letzten Zwischensumme.
if (zwischenSummeCharStyle.name){
var zwischenSumme = myTab.search( undefined, false, false, undefined,
{appliedCharacterStyle:zwischenSumeCharStyle}, )

// Summenbildung
zwischenSummeSum = summieren(zwischenSumme);

// Ergebnisses in entsprechende Zelle einfügen ??

}

// von Punkt auf Komma umstellen
function digitFormatter(x) {
return String(Number(x).toFixed(2)).replace(".", ",");
}


Danke schonmal

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541901]

Tabelle für Leistungsverzeichnis und Angebote

iduser
Beiträge gesamt: 107

11. Aug 2015, 15:55
Beitrag # 10 von 27
Beitrag ID: #541939
Bewertung:
(5239 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Das größte Problem sehe ich momentan noch darin, das die Tabelle markiert werden sollte. Suche nach einer Lösung, wo das nicht nötig ist. (Ganz am Anfang des Codes.)

Das kann man über das Skriptetikett lösen, dabei gibt es verschiedene Möglichkeiten:
1. Du markierst die Tabelle, öffnest das Panel "Skriptetikett" und gibst dort einen eindeutigen Namen ein, der die Tabelle beschreibt, bspw. "Rechnungstabelle_001" (mir ist grad nichts besseres eingefallen)
2. du markierst die Tabelle und führst nachfolgenden Code aus:
Code
app.selection[0].label = "Rechnungstabelle_001"; 


Mit einer der beiden Varianten hast du erstmal das Label gesetzt. Nun kannst du mit bspw.
Code
app.activeDocument.stories.everyItem().tables.itemByName("Rechnungstabelle_001") 

auf die Tabelle zugreifen.
http://jongware.mit.edu/idcs6js/pc_Table.html
Einzige Einschränkung wäre, dass im Dokument nur eine Tabelle mit diesem Label existiert. Ansonsten bekommst du die erst beste geliefert.

=>
Code
var myTab = app.activeDocument.stories.everyItem().tables.itemByName("Rechnungstabelle_001"); 



Antwort auf: if (app.selection[0].parent.constructor.name == "aktivePosition"){...

Das kann so nicht funktionieren, da es in ID kein Object vom Constructor "aktivePosition" gibt. Vorher stand dort wahrscheinlich Cell. Damit prüfst du, ob die Auswahl eine Zelle ist, nur dann macht auch die nachfolgende Zeile
Code
var myTable = app.selection[0].parent.parent; 

einen Sinn. Denn da springts zum Elternelement von der Zelle, welche die Tabelle ist.
(Obwohl bei mir nur einmal parent funktioniert, wahrscheinlich ist das ID-Versionsabhängig)...
Da du aber über das Label deine Tabelle schon hast, kannst du dir die Zeilen eigentlich sparen.

Antwort auf:
Code
columnGP = "NEP" // kann so noch nicht funktionieren. 


Hier müsste eher stehen
Code
_oneRow.cells[columnGP-1].contents = "NEP" 

Damit sprichst du die 5te Zelle der Zeile an. Mit Contents legst du die Zeichenkette fest, welche in der Zelle erscheint.

Mein Ratschlag wäre, dass du die Codeschnipsel separat einmal ausführst und schaust was sie machen bzw. welche Fehlermeldungen erscheinen. Dann kannst du aus deinen Schnipseln das "große" Skript zusammenbauen. So behälst du besser den Überblick, weist wie die einzelnen Teile funktionieren und kannst besser an einem Teilproblem operieren.
Um einen Überlick zu gewinnen schau dir mal die Übersicht von Gregor Fellenz an (http://www.indesignjs.de/...ing_Kurzreferenz.pdf) und schnarch bei Jongware http://www.jongware.com/idjshelp.html in der Objektübersicht samt Eigenschaften und Methoden.

Ich hoffe, damit kommst du erstmal ein Stückchen weiter.
Zu kommentieren des restlichen Teils, fehlt mir gerade die Zeit.

Viel Erfolg,
Philipp

Philipp


als Antwort auf: [#541932]
(Dieser Beitrag wurde von iduser am 11. Aug 2015, 15:57 geändert)

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

12. Aug 2015, 07:52
Beitrag # 11 von 27
Beitrag ID: #541944
Bewertung:
(5142 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Ich hoffe, damit kommst du erstmal ein Stückchen weiter.
Zu kommentieren des restlichen Teils, fehlt mir gerade die Zeit.


Definitiv! Vielen Dank schon mal!

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541939]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

12. Aug 2015, 09:24
Beitrag # 12 von 27
Beitrag ID: #541951
Bewertung:
(5114 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So. Mit dem ersten Schnipsel habe ich mich auseinandergesetzt und komme bereits nicht weiter.

Das Skriptetikett der Tabelle "tableLV01" habe ich überprüft
Die Tabelle hat insgesamt 6 Spalten
Das Zellformat "alternativPosition" habe ich überprüft (Rechtschreibung) und auf 2 Zeilen angewandt.

Getestet habe ich es mit den Spalten 5 und 6 befüllt und auch leer.
In Tabelle mit und ohne Kopf- / Fusszeilen

Fehlermeldung kommt keine beim Ausführen des Codes.

Müsste nach der Kurzübersicht in der ersten Zeile nicht noch die .characters angesprochen werden? An Stelle von .stories? Tables sind ja ein Unterelement von Characters.

Hier mal noch der Code:
Code
var myTab = app.activeDocument.stories.everyItem().tables.itemByName("tableLV01") ; 
var columnGP = 6;

for(var t=0; t<myTab.rows.length; t++){
var _oneRow = myTab.rows[t];

if(_oneRow.cells[0].appliedCellStyle.name == "alternativPosition"){
_oneRow.cells[columnGP-1].contents = "NEP" ;
}
}


Danke und Grüße

Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541944]

Tabelle für Leistungsverzeichnis und Angebote

eingangfabrik
Beiträge gesamt: 33

12. Aug 2015, 11:37
Beitrag # 13 von 27
Beitrag ID: #541964
Bewertung:
(5067 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und weiter geht's mit Misserfolgen:

Es wird mir immer Fehlernummer: 24 ausgegeben.
myTable.columns.item(columnMenge).cells[k].contents.replace ist keine Funktion.
Mit Bezug auf Zeile 15. Wenn ich diese Zeile lösche, kommt dasselbe Problem mit Zeile 21.

Erst mein Script:

Code
var myTable = app.activeDocument.stories.everyItem().tables.itemByName("tableLV01") ;	 
var MWST = 19/100;

var myLastCol = myTable.columns.length-1;
var myLastRow = myTable.rows.length-1;

var columnMenge = 3
var columnEP = myLastRow -1;

var mySum = 0;
var myPrice = 0;

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

myPrice = ((myTable.columns.item(columnMenge).cells[k].contents.replace(",", "."))*(myTable.columns.item(columnEP).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);
}


und noch die Vorlage. Die übrigens funktioniert, aber man muss halt einen Cursor in der Tabelle haben.

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 = 0; 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);
}


Grüße
Adrian
_______________________________________________________________
InDesign CS5 (OS X)
Illustrator CS5 (OS X)


als Antwort auf: [#541951]

Tabelle für Leistungsverzeichnis und Angebote

iduser
Beiträge gesamt: 107

13. Aug 2015, 19:18
Beitrag # 14 von 27
Beitrag ID: #541995
Bewertung:
(4898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
mit
Code
var myTab = app.activeDocument.stories.everyItem().tables.itemByName("tableLV01") ; 

bekommt man zwar die Tabelle, aber Änderungen werden nicht vorgenommen. Das war mir bis jetzt auch nicht bewusst.

Mit der Variante sollte es aber funktionieren (gerade getestet.). Bestimmt gibts für die Schleife durch die Stories auch nen Einzeiler...
Code
//Diese Variante berücksichtigt keine Tabellen in Fußnoten! 

var _doc = app.activeDocument;
var _allStories = _doc.stories;

// Schleife durch Textabschnitte
for(var s=0; s<_allStories.length; s++){
var myTable = _allStories[s].tables.itemByName("tableLV01");
// Wenn myTable gültig ist, beende Schleife vorzeitig
if(myTable.isValid) break;
}

// Wenn myTable gültig ist, dann ...
if(myTable.isValid){
var columnGP = 6;

for(var t=0; t<myTable.rows.length; t++){
var _oneRow = myTable.rows[t];

if(_oneRow.cells[-1].appliedCellStyle.name == "alternativPosition"){
_oneRow.cells[5].contents = "NEP" ;
}
}
}
else {alert("Tabelle mit dem Label 'tableLV01' existiert nicht.");}


PS: _oneRow.cells[-1] gibt dir die letzte Zelle in der Zeile zurück


als Antwort auf: [#541951]
(Dieser Beitrag wurde von iduser am 13. Aug 2015, 19:21 geändert)

Tabelle für Leistungsverzeichnis und Angebote

Kai Rübsamen
Beiträge gesamt: 4664

13. Aug 2015, 20:24
Beitrag # 15 von 27
Beitrag ID: #541996
Bewertung:
(4866 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Es wird immer nur eine Tabelle geben pro Datei. (Die Tabelle kann aber über mehrere Seiten führen)


Darf ich mal fragen, warum ihr so an dem label festhaltet? Bei EINER Tabelle sollte doch auch das funktionieren:
Code
var curTable = app.activeDocument.stories.everyItem().tables[0]; 


Gruß Kai Rübsamen


als Antwort auf: [#541995]
X

Aktuell

Photoshop / Lightroom
panorama_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
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
02.08.2021 - 03.08.2021

Digicomp Academy, Bern,Basel
Montag, 02. Aug. 2021, 08.30 Uhr - Dienstag, 03. Aug. 2021, 17.00 Uhr

Kurs

In diesem Advanced-Kurs erlernen Sie weitergehende Methoden im Dokumentenaufbau, der Typografie und im Bereich Layouttechniken. Nach diesem Kurs können Sie strukturierte Dokumente erstellen oder bestehende effizienter anpassen.

Preis: 1'400.– zzgl. 7.7% MWST
Dauer2 Tage

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberater AT digicomp DOT ch