[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Monatsseite automatisch generieren - InDesign CS5, Windows, JS

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

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

5. Jul 2011, 11:37
Beitrag # 1 von 41
Bewertung:
(13327 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

weiß jemand, wie ich folgende Ausgabe per Script automatisch auf meine Heftseite in InDesign (senkrecht untereinander, zeilenweise je Tag also)?
Code
August 2011 
1 Mo
2 Di
3 Mi
4 Do
5 Fr
6 Sa
7 So
usw. ...

Habe mir schon u.a. zwei Scripte angesehen (Calender Wizard und Calender Maker) aber es so nicht hinbekommen mit diesen.
Desweiteren soll es eine Lösung in Verbindung mit Excel geben, die ich ungern verwenden würde.

Danke für die Hilfe im Voraus!
Gruß
J.R.
X

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

Martin Fischer
  
Beiträge gesamt: 12783

5. Jul 2011, 12:00
Beitrag # 2 von 41
Beitrag ID: #475235
Bewertung:
(13309 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Desweiteren soll es eine Lösung in Verbindung mit Excel geben, die ich ungern verwenden würde.


Aus welchem Grund?


Antwort auf: weiß jemand, wie ich folgende Ausgabe per Script automatisch auf meine Heftseite in InDesign (senkrecht untereinander, zeilenweise je Tag also)?


Hat Du schon einen Ansatz?


als Antwort auf: [#475230]
(Dieser Beitrag wurde von Martin Fischer am 5. Jul 2011, 12:01 geändert)

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

5. Jul 2011, 12:05
Beitrag # 3 von 41
Beitrag ID: #475237
Bewertung:
(13303 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Grund:
Nicht jeder Anwender hat Excel auf seinem Rechner;
Damit der Anwender, der Layouts erstellt, nicht X Dateien um sich herum hat, um ein Heft zu erstellen (ID Vorlage, XML, JScript Datei ...).
Führt denn kein Weg an Excel vorbei?
Gruß
J.R.

Edit:
Mein Ansatz wäre folgender (wenn es nicht etwas einfachere, fertiges gibt):
- Aktuelles Systemdatum mit aktuellem Tag herausfinden
- Anhand von den Infos mich zum ersten Tag im Monat zurückarbeiten und zum letzten Tag im Monat vorarbeiten.
Später dann das ganze so anpassen evtl. dass User den Monat auswählen/angeben kann.


als Antwort auf: [#475235]
(Dieser Beitrag wurde von JonesRidder am 5. Jul 2011, 12:09 geändert)

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

Martin Fischer
  
Beiträge gesamt: 12783

5. Jul 2011, 12:11
Beitrag # 4 von 41
Beitrag ID: #475238
Bewertung:
(13292 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Führt denn kein Weg an Excel vorbei?


Selbstverständlich kann man sich so was auch programmieren lassen.
Aber auch dann hat man mindestens eine weitere Datei – das Skript – zu verwalten. ;-)

Du könntest es auch über eine nummerierte Liste direkt in InDesign ohne zusätzliche Dateien erledigen.


als Antwort auf: [#475237]
(Dieser Beitrag wurde von Martin Fischer am 5. Jul 2011, 12:13 geändert)

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

5. Jul 2011, 12:19
Beitrag # 5 von 41
Beitrag ID: #475240
Bewertung:
(13282 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe ja bereits ein Script, diese Kalendergeschichte würde ich da mit reinschreiben an der entsprechenden Stelle.
Ich sehe mir das mit der nummerierten Liste mal an, wenn das nichts hilft, dann versuche ich es zu programmieren.

Danke
Gruß
J.R.


als Antwort auf: [#475238]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

WernerPerplies
Beiträge gesamt: 2762

5. Jul 2011, 12:36
Beitrag # 6 von 41
Beitrag ID: #475241
Bewertung: |
(13257 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo J.R.,

du hast recht, Excel ist m. E. für diese Aufgabe nicht sehr sinnvoll.

Mit JavaScript kannst Du jeden Kalender in jeder Sprache und fast jeder Zeit erzeugen.

Schau die einfach mal die Datumsklasse an.


als Antwort auf: [#475240]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

6. Jul 2011, 08:50
Beitrag # 7 von 41
Beitrag ID: #475282
Bewertung:
(13178 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So die Herren,

den Ablauf an sich hab ich geschrieben, zum testen werden die jeweiligen Daten in alert Boxen ausgegeben, dabei geht es immer vom ersten bis 31 des Monats (auch wenn der Monat weniger Tage hat).
Code
var jetzt = new Date(); 
var XterTagInWoche = jetzt.getDay(); //aktuell Xter Tag in der Woche 0-6
var Wochentage = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
//var XterTagInMonat = jetzt.getDate(); //aktuell Xter Tag im Monat 0-31
var Jahr = jetzt.getFullYear(); //2011
var XterMonatImJahr = jetzt.getMonth(); //aktueller Monat 0 bis 11
var Monate = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");

// Ausgabe: [Akteuller Monat][LEER][Aktulles Jahr]
var AusgabeMonatJahr = (Monate[XterMonatImJahr] + " " + Jahr);

//Alle Datums mit und vor aktuellem Datum schreiben
for(var XterTagInMonat = jetzt.getDate(); XterTagInMonat > 0; XterTagInMonat--) {
if (XterTagInWoche < 0) {
XterTagInWoche = 6;
}
// Ausgabe: [Tageszahl im aktuellen Datum][LEER][Ersten zwei Buchstaben des Wochentags]
alert("AB " + XterTagInMonat + " " + Wochentage[XterTagInWoche].substring(0,2));
XterTagInWoche--;
}

//Alle Datums nach aktuellem Datum schreiben
for(var XterTagInMonat = jetzt.getDate()+1; XterTagInMonat < 32; XterTagInMonat++) {
if (XterTagInWoche > 6) {
XterTagInWoche = 0;
}
// Ausgabe: [Tageszahl im aktuellen Datum][LEER][Ersten zwei Buchstaben des Wochentags]
alert("AB " + XterTagInMonat + " " + Wochentage[XterTagInWoche].substring(0,2));
XterTagInWoche++;
}



Meine Frage nun:
1. Wie gebe ich die Daten im Textrahmen "ebTage" zeilenweise untereinadner aus (die InDesign Seite ist bereits vorhanden)?
2. Ist es vorher nötig, die Daten in ein Array zu schreiben (Index 0 = 1. Tag im Monat bis Index 30 = 31 Tag im Monat)? Wobei das Array nicht von vorne nach hinten gefüllt werden würde (zumindest in der ersten Schleife nicht, da die ja rückwärts geht).
3. Was haltet Ihr von diesem Ansatz (sehr vereinfachte herangehensweise, wo z.B. keine Feiertage oder so berücksichtigt werden),
würdet Ihr es anders machen, wenn ja, wie?

Danke für eure Hilfe!

Gruß
J.R.


als Antwort auf: [#475241]
(Dieser Beitrag wurde von JonesRidder am 6. Jul 2011, 08:52 geändert)

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

WernerPerplies
Beiträge gesamt: 2762

6. Jul 2011, 09:20
Beitrag # 8 von 41
Beitrag ID: #475283
Bewertung:
(13162 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So der Herr, ;-)

ich würde mir ein Template anlegen, in das ich dann die entsprechenden Daten per Suchen und Ersetzen einsetzen würde.

Alternativ:

Wenn das Ergebnis eine Tabelle sein soll, könnte man auch die Vorlage als externen Text aufbauen, dann wieder per Suchen und Ersetzen die Einsetzungen machen und anschließend den Text in eine Tabelle umwandeln.

Die Template-Lösung in InDesign hat den Vorteil, dass man sehr leicht zu jeder Zeit, ohne Änderung am Skript, das Design des Kalenders ändern kann.

Ich weiß, das klingt alles recht kryptisch, funktioniert aber.

Ich habe so etwas mit meinem Programm SearARep realisiert, wobei die eigentliche Ersetzung recht einfach funktioniert, die Erstellung der Kalenderdaten nicht.

Schau Dir mal hier die Vorlage für einen Monat an, realisiert in Corel Ventura, aber es funktioniert genauso in InDesign.
Beitrag:
http://weepee.de/...-terminkalender.html
-> 6.
Solch eine Lösung sollte problemlos auch in JavaScript zu realisieren sein.


als Antwort auf: [#475282]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

Kai Rübsamen
Beiträge gesamt: 4684

6. Jul 2011, 11:19
Beitrag # 9 von 41
Beitrag ID: #475288
Bewertung:
(13126 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Was willst du denn in den Rahmen schreiben? Das Ergebnis des 1. und 2. alert-Fensters oder nur das zweite?

Im zweiten alert stecken in dem Fall AB 7 Do - AB 31 So.

Unter der Voraussetzung, dass dein Textrahmen als "ebTage" benannt ist, würde nachfolgender Code schon mal das zweite alert-Fenster im Rahmen auszugeben:

Code
var erg = new Array(); 

//Alle Datums nach aktuellem Datum schreiben
for(var XterTagInMonat = jetzt.getDate()+1; XterTagInMonat < 32; XterTagInMonat++) {
if (XterTagInWoche > 6) {
XterTagInWoche = 0;
}
// Ausgabe: [Tageszahl im aktuellen Datum][LEER][Ersten zwei Buchstaben des Wochentags]
var d = "AB " + XterTagInMonat + " " + Wochentage[XterTagInWoche].substring(0, 2);
erg.push(d);
XterTagInWoche++;
}

var theString = erg.join("\r");
app.activeDocument.textFrames.itemByName("ebTage").contents = theString;



als Antwort auf: [#475283]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

6. Jul 2011, 12:40
Beitrag # 10 von 41
Beitrag ID: #475294
Bewertung:
(13103 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

habe das Problem jetzt insoweit hinbekommen, dass die Daten an sich richtig ausgegeben werden nach folgendem Muster, in einzelnen Textrahmen je Zeile (ebTag1 bis ebTag31):
Code
1 Fr 
2 Sa
3 So
...
31 So


1. Wie formatiere ich das ganze nach folgendem Muster im nachfolgenden Code:
Code
 1 Fr 
...
10 So
...

(also: Zahlen rechtsbündig (flattern also links aber rechts nicht),
gefolgt von einem TAB,
sodass Mo, Di, Mi, Do, Fr, Sa, So immer linksbündig sind

2. Wie/Wo müsste ich den Code am besten ändern, wenn man davon ausgeht, dass nicht der aktuelle, sondern für den nächsten Monat das Layout entworfen wird? Kann ich anstatt der Definition von "var jetzt ..." (erste Variable im Code) so etwas wie "jetzt im nächsten Monat" definieren?

CODE
Code
var jetzt = new Date(); 
var XterTagInWoche = jetzt.getDay(); //aktuell Xter Tag in der Woche 0-6
var Wochentage = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
var Jahr = jetzt.getFullYear(); //2011
var XterMonatImJahr = jetzt.getMonth(); //aktueller Monat 0 bis 11
var Monate = new Array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
var AusgabeMonatJahr = (Monate[XterMonatImJahr] + "\n" + Jahr);
_ebMonatJahr = getMasterPageItem("ebMonatJahr", _page);
_ebMonatJahr.contents = AusgabeMonatJahr;

//Alle Datums mit und vor aktuellem Datum schreiben FUNKTIONIERT
for(var XterTagInMonat = jetzt.getDate(); XterTagInMonat > 0; XterTagInMonat--) {
if (XterTagInWoche < 0) {
XterTagInWoche = 6;
}
// Ausgabe: [Tageszahl im aktuellen Datum][LEER][Ersten zwei Buchstaben des Wochentags]
//alert("AB " + XterTagInMonat + " " + Wochentage[XterTagInWoche].substring(0,2));
//Zeile auf Seite ausgeben
var AusgabeTag = XterTagInMonat + "\t" + Wochentage[XterTagInWoche].substring(0,2);
_ebTag = getMasterPageItem("ebTag" + XterTagInMonat, _page);
_ebTag.contents = AusgabeTag;
XterTagInWoche--;
}

//Alle Datums nach aktuellem Datum schreiben FUNKTIONIERT
for(var XterTagInMonat = jetzt.getDate()+1; XterTagInMonat < 32; XterTagInMonat++) {
if (XterTagInWoche > 6) {
XterTagInWoche = 0;
}
// Ausgabe: [Tageszahl im aktuellen Datum][LEER][Ersten zwei Buchstaben des Wochentags]
//alert("AB " + XterTagInMonat + " " + Wochentage[XterTagInWoche].substring(0,2));
//Zeile auf Seite ausgeben
var AusgabeTag = XterTagInMonat + "\t" + Wochentage[XterTagInWoche].substring(0,2);
_ebTag = getMasterPageItem("ebTag" + XterTagInMonat, _page);
_ebTag.contents = AusgabeTag;
XterTagInWoche++;
}


Weitere Hinweise:
- Ich brauche kein Array zwingend
- Ich brauche keine Feiertage etc. (nur möchte ich Sonntage und Feiertage farblich hervorheben und die Schrift vergrößern - das ganze durch Zuweisung eines Absatzformats)

Gruß
J.R.


als Antwort auf: [#475288]
(Dieser Beitrag wurde von JonesRidder am 6. Jul 2011, 12:46 geändert)

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

6. Jul 2011, 13:06
Beitrag # 11 von 41
Beitrag ID: #475298
Bewertung:
(13083 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vergisst die Sache mit
"2. Wo/Wie ..."
Statt dessen:
Ich habe in einer variable den Namen des Monats stehen, für den ich die Kalenderseite machen möchte.
Wie kann ich anhand dieser Info, den Namen des Tages des ersten im jeweiligen Monat herausfinden,
um dann anschließend nach dem Schema meiner 2. Schleife im Code (Posting vorher) vorarbeiten bis zum 31.?

Gruß
J.R.


als Antwort auf: [#475294]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

WernerPerplies
Beiträge gesamt: 2762

6. Jul 2011, 14:09
Beitrag # 12 von 41
Beitrag ID: #475303
Bewertung:
(13060 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So ganz verstehe ich Deine Frage nicht, aber vielleicht helfen Dir diese Datumsfunktionen weiter:
Code
// Datum erster Mai 
var day = new Date(2011,4,1);
alert(day);
// umwandeln in Zeit
var tMayFirst = day.getTime();
// einen Tag abziehen
var tAprilLast = tMayFirst - (1 * 24 * 60 * 60 * 1000);
// Datum aus Zeit ermitteln
day.setTime(tAprilLast );
// letzter Tag des Monats
alert(day);



als Antwort auf: [#475298]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

7. Jul 2011, 07:39
Beitrag # 13 von 41
Beitrag ID: #475352
Bewertung:
(13016 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ein Heft wird - irgendwann vor eintreten des Publikationsmonat - für einen bestimmten Monat erstellt.
Das Heft hat eine Seite mit einer Kalenderübersicht, für den Publikationsmonat.
Um den Kalender zu generieren, muss ich den ersten des Publikationsmonat herausfinden mit dem entsprechenden Tag um von diesem bis zum 31. anhand einer Schleife durchzulaufen.

@Werner Perplies:
Dein Posting scheint mein Problem lösen zu können.
Danke!

Gruß
J.R.


als Antwort auf: [#475303]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

WernerPerplies
Beiträge gesamt: 2762

7. Jul 2011, 07:46
Beitrag # 14 von 41
Beitrag ID: #475355
Bewertung:
(13011 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo J.R.,

Zitat Dein Posting scheint mein Problem lösen zu können.

Ja, ich denke das auch. So lange Du keine Kalenderwoche brauchst, sollte das reichen.

Zitat Danke!

da nich für! ;-)
gerne.


als Antwort auf: [#475352]

Monatsseite automatisch generieren - InDesign CS5, Windows, JS

JonesRidder
Beiträge gesamt: 85

7. Jul 2011, 10:07
Beitrag # 15 von 41
Beitrag ID: #475371
Bewertung:
(12984 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

wisst Ihr, wie man den Inhalt eines XML Attributs in eine Variable schreibt (krieg ich irgendwie nicht hin):

XML
Code
<dataroot> 
<Artikel>
...
<Rubrik Typ="TypXY" Vom="01.07.2011">RubrikXY</Rubrik>
</Artikel>
</dataroot>

Ich möchte jetzt vom Element <Rubrik> das Attribut "Vom" in zwei Variable schreiben:
Code
var _dok = app.activeDocument; 
var _root = _dok.xmlElements[0];
var Jahr = _root.xmlElements[0].xmlAttributes.itemByName("Rubrik[@Vom]").value.substring(6,4);
var Monat = _root.xmlElements[0].xmlAttributes.itemByName("Rubrik[@EVom]").value.substring(3,2);
alert(Monat + " " + Jahr)

Fehlermeldung:
Code
_artikel.xmlAttributes.itemByName("Rubrik[@Vom]") ist keine Funktion. 


Gruß
J.R.


als Antwort auf: [#475355]
(Dieser Beitrag wurde von JonesRidder am 7. Jul 2011, 10:19 geändert)
X