[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt INDesign Script für Datenzusammenführung

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

INDesign Script für Datenzusammenführung

Bonsai
Beiträge gesamt: 98

12. Jun 2013, 14:47
Beitrag # 1 von 13
Bewertung:
(8733 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

bin auf der Suche nach einem Script zur automatisierten Datenzusammenführung in InDesign CS6.
Grundkonfiguration:
- Master-Dokument mit csv-Anbindung (variable Platzhalter-Texte)
- Dokument besteht aus 4 Seiten

Was soll das Script leisten können?
- Über Datenzusammenführung pro Excel/csv-Zeile ein neues InDesign-Dokument erstellen
- Dokument in vorgegebenen Folder abspeichern
- Dateibenamung anhand einer variable, die in Excel definiert ist und als variabler Text eingelesen wird.
Beispiel:
Excel-Spalte--> B --> 08154711
InDesign-Dateiname --> 08154711.indd

Gibt's sowas? Kann mir da jemand weiterhelfen?

Vielen Dank
___________________________________________________________

Techniker: Ja, das könnte natürlich auch ein Bug sein ... ^^
Hier Klicken X

INDesign Script für Datenzusammenführung

WernerPerplies
Beiträge gesamt: 2213

12. Jun 2013, 15:11
Beitrag # 2 von 13
Beitrag ID: #513776
Bewertung:
(8718 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bonsai,

Zitat Gibt's sowas?


Ich weiß es nicht.

Zitat Kann mir da jemand weiterhelfen?


Ja, gerne. Bei Interesse mache ich Ihnen gerne ein Angebot.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#513775]

INDesign Script für Datenzusammenführung

-hans-
Beiträge gesamt: 737

12. Jun 2013, 18:25
Beitrag # 3 von 13
Beitrag ID: #513791
Bewertung: ||
(8665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wie der Dateiname ermittelt werden soll ist nicht präzise formuliert (oder ich hab's nur nicht verstanden ;-) )

Ansonsten sollte es so gehen:
Code
var destFolderPath = Folder.selectDialog('DestFolder').absoluteURI + '/' 

var currDoc = app.activeDocument;//vorbereitetes Dokument
currDoc.dataMergeOptions.createNewDocument = true;

var maxRange = currDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];//Anzahl der Datensätze in der CSV
//schleife durch die Datensätze
for(var i = 0; i < maxRange; i++)
{
with(currDoc.dataMergeProperties.dataMergePreferences)
{
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}

currDoc.dataMergeProperties.mergeRecords();
app.activeDocument.save(File(destFolderPath +(i+1) + '.indd'));
app.activeDocument.close();
}


ohne Gewähr.
Lieben Gruß

Hans-Gerd Claßen


als Antwort auf: [#513775]

INDesign Script für Datenzusammenführung

Bonsai
Beiträge gesamt: 98

13. Jun 2013, 06:55
Beitrag # 4 von 13
Beitrag ID: #513797
Bewertung:
(8607 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Claßen,

der Dateiname steht als Wert in jeder CSV-Zeile.
Bspw. Spalte A, Datensatz 1 = 08154711
Dokumentname: 08154711.indd

spw. Spalte A, Datensatz 2 = 012345
Dokumentname: 012345.indd

Viele Grüße
___________________________________________________________

Techniker: Ja, das könnte natürlich auch ein Bug sein ... ^^


als Antwort auf: [#513791]

INDesign Script für Datenzusammenführung

-hans-
Beiträge gesamt: 737

13. Jun 2013, 11:08
Beitrag # 5 von 13
Beitrag ID: #513807
Bewertung:
(8557 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

bitte die Spaltennummer in der der Dateiname in der CSV-Datei steht im Script eintragen, ebenso den Separator, der verwendet wird.

Ohne Originaldaten schwieritsch dass alles :)

Startpunkt ist eine geöffnete, für die Datenzusammenführung vorbereitete, Indesigndatei ...

Code
var fileNameColumn = 1;//Bitte hier die Spaltennummer eintragen, in der in der CSV der neue Dateiname hinterlegt ist. 
var csvSeparator = ','//Bitte hier den Separator der CSV-Datei eintragen

var destFolderPath = Folder.selectDialog('Zielordner wählen').absoluteURI + '/' ;
var csvFile = File.openDialog('CSV-Datei wählen');

//csv einlesen
var fileNames = new Array();
csvFile.open('r');
while (!csvFile.eof) {
fileNames.push(csvFile.readln().split(csvSeparator)[fileNameColumn-1]);
}
csvFile.close();


var currDoc = app.activeDocument;//vorbereitetes Dokument
currDoc.dataMergeOptions.createNewDocument = true;

var maxRange = currDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];//Anzahl der Datensätze in der CSV
//schleife durch die Datensätze
for(var i = 0; i < maxRange; i++)
{
with(currDoc.dataMergeProperties.dataMergePreferences)
{
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}

currDoc.dataMergeProperties.mergeRecords();
app.activeDocument.save(File(destFolderPath +fileNames[i+1] + '.indd'));
app.activeDocument.close();
}

Lieben Gruß

Hans-Gerd Claßen


als Antwort auf: [#513797]

INDesign Script für Datenzusammenführung

OnkelAndi
Beiträge gesamt: 4

20. Jul 2014, 17:48
Beitrag # 6 von 13
Beitrag ID: #529976
Bewertung:
(7374 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

die folgende Schleife habe ich auch verwendet:
Code
var maxRange =  currDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];//Anzahl der Datensätze in der CSV   
//schleife durch die Datensätze
for(var i = 0; i < maxRange; i++)
{
with(currDoc.dataMergeProperties.dataMergePreferences)
{
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}

currDoc.dataMergeProperties.mergeRecords();
app.activeDocument.save(File(destFolderPath +fileNames[i+1] + '.indd'));
app.activeDocument.close();
}


Kennt jemand eine Lösung, um die Variable "i" und "maxRange" per Eingabe-Dialog zu ändern ?
Sprich, kann man aus der txt-Datei auch einen bestimmten Datensatz wählen? Ok, ich könnte die Excelliste filtern und ausgeben, aber das wäre nur eine Alternative.

Über Feedback freue ich mich.
Danke!


als Antwort auf: [#513807]

INDesign Script für Datenzusammenführung

OnkelAndi
Beiträge gesamt: 4

20. Jul 2014, 19:04
Beitrag # 7 von 13
Beitrag ID: #529978
Bewertung:
(7333 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier mal mein Lösungsansatz:

Code
//EINGABE-DIALOG 
with(myDialog = app.dialogs.add({name:"DATENSÄTZE für AUSGABE", canCancel: true})){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"Bitte wählen:"});
}
var myRangeButtons = radiobuttonGroups.add();
with(myRangeButtons){
radiobuttonControls.add({staticLabel:"Alle Datensätze ausgeben !", checkedState:true});
radiobuttonControls.add({staticLabel:"Folgende Datensätze ausgeben: "});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"von - bis: "});
var DatenSTART = realEditboxes.add();
var DatenENDE = realEditboxes.add();
}
}
var myResult = myDialog.show();
if(myResult == true){
var myAuswahl = myRangeButtons.selectedButton +1;
DatenSTART;
DatenENDE;
}
else{
myDialog.destroy();
}
}
//Variablen aus DIALOG
if (myAuswahl == [1]){
var maxRange = curDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1]; //Anzahl der Datensätze in der CSV
var i = 0;
}
if (myAuswahl == [2]){
var maxRange = DatenENDE; //Anzahl der Datensätze in der CSV
var i = DatenSTART;
}
//schleife durch die Datensätze
for(i; i < maxRange; i++){
with(curDoc.dataMergeProperties.dataMergePreferences){
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;}

curDoc.dataMergeProperties.mergeRecords();
app.activeDocument.save(File(destFolderPath + fileNames[i+1] + '.indd'));


Hat jemand eine funktionierende Idee oder erkennt den Fehler?


als Antwort auf: [#529976]

INDesign Script für Datenzusammenführung

Hans Haesler
  
Beiträge gesamt: 5606

21. Jul 2014, 08:24
Beitrag # 8 von 13
Beitrag ID: #529982
Bewertung:
(7256 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo OnkelAndi,

herzlich willkommen in der Skriptwerkstatt auf HDS! :-)

Es hat mehr als einen Fehler ...

Für die öffnende Klammer von Zeile 38 hat es keine schliessende. Wenn diese eingefügt ist, dann wird der Dialog gezeigt.

Jetzt vor der Schleife am Schluss diese beiden Zeilen einfügen:

Code
alert (i); 
exit();

Dann im Dialog den zweiten Radiobutton wählen, im "von"-Eingabefeld eine Zahl tippen und "OK" klicken.

Das Ergebnis: Der Alert zeigt "[object RealEditbox]". Weil der Startwert für 'i' nicht zugewiesen wurde.

Das kann so geschehen:

Code
var startVal = DatenSTART.editContents*1; 

Anstelle des nackten 'i' wird eine Variable verwendet. Mit dem 'i' alleine würde es auch funktionieren. Wäre aber ungewöhnlich.
Das '*1' am Ende der Zeile wandelt den String in eine Zahl um.

Der Abschnitt "Variablen aus dem Dialog" kann weiter hinauf verschoben werden. Die Zeile 'myDialog.destroy()' muss ebenfalls eingefügt werden. Und für den Fall, dass der Anwender "Abbrechen" klickt, ein 'exit()', um die Ausführuung abzubrechen.

Hier mal eine korrigierte Version:

Code
var curDoc = app.documents[0]; 

// EINGABE-DIALOG
with (myDialog = app.dialogs.add({name:"DATENSÄTZE für AUSGABE", canCancel: true})) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({staticLabel:"Bitte wählen:"});
}
var myRangeButtons = radiobuttonGroups.add();
with (myRangeButtons) {
radiobuttonControls.add({staticLabel:"Alle Datensätze ausgeben!", checkedState:true});
radiobuttonControls.add({staticLabel:"Folgende Datensätze ausgeben: "});
}
with (dialogRows.add()) {
staticTexts.add({staticLabel:"von - bis: "});
var DatenSTART = realEditboxes.add();
var DatenENDE = realEditboxes.add();
}
}
var myResult = myDialog.show();
if (myResult == true) {
var myAuswahl = myRangeButtons.selectedButton+1;
// Variablen aus DIALOG
if (myAuswahl == 1){
var startVal = 0;
var maxRange = curDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1]; //Anzahl der Datensätze in der CSV
}
if (myAuswahl == 2){
var startVal = DatenSTART.editContents*1;
var maxRange = DatenENDE.editContents*1; //Anzahl der Datensätze in der CSV
}
myDialog.destroy();
}
else {
myDialog.destroy();
exit();
}
}

// Schleife durch die Datensätze
for (i = startVal; i < maxRange; i++) {
with (curDoc.dataMergeProperties.dataMergePreferences) {
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}
}

curDoc.dataMergeProperties.mergeRecords();
curDoc.save(File(destFolderPath + fileNames[i+1] + '.indd'));

Ob die Schleife durch die Datensätze und das Zusammenführen funktionieren, habe ich nicht getestet.

Gruss, Hans


als Antwort auf: [#529978]

INDesign Script für Datenzusammenführung

OnkelAndi
Beiträge gesamt: 4

21. Jul 2014, 12:01
Beitrag # 9 von 13
Beitrag ID: #530001
Bewertung:
(7211 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die schnelle Reaktion und Hilfe.
Die schließende Klammer hatte ich vergessen.
Da das SCript noch einige andere Aufgaben innerhalb der Schleife ausführt.

Deine korrigierte Version habe ich eingebaut und sie funktioniert genauso, wie ich es mir vorgestellt habe. >>> GENIAL !!!

Der einzigste Haken ist der Startwert. Wenn ich 1 eingebe, startet die Schleife bei 2, wenn ich 0 eingebe, klappt es aber.
Korrektur: anstatt *1, -1.
Code
var startVal = DatenSTART.editContents-1; 


Vielen Dank Hans.
Das hilft mir sehr weiter :-)


als Antwort auf: [#529982]

INDesign Script für Datenzusammenführung

Hans Haesler
  
Beiträge gesamt: 5606

21. Jul 2014, 13:22
Beitrag # 10 von 13
Beitrag ID: #530005
Bewertung:
(7177 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo OnkelAndi,

bitte sehr. Ja, diese JavaScript-Zählweise ...

Zwei weitere Änderungsvorschläge:
– Eingabe auf ganze Zahlen beschränken (integer statt real);
– Minimum- und Maximumwerte definieren;

Code
			var DatenSTART = integerEditboxes.add({minimumValue:1, maximumValue:99}); 
var DatenENDE = integerEditboxes.add({minimumValue:1, maximumValue:99});

Beides ist nicht zwingend. Aber es kann helfen:
– Eingaben mit Dezimalstellen werden automatisch gerundet.
– Negative Zahlen sind nicht möglich.

Und auch noch:
– Prüfen der beiden Werte.

Code
	var myResult = myDialog.show(); 
if (myResult == true) {
var okay = true;
var myAuswahl = myRangeButtons.selectedButton+1;
// Variablen aus DIALOG
if (myAuswahl == 1){
var startVal = 0;
var maxRange = curDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];
}
if (myAuswahl == 2){
var startVal = DatenSTART.editContents-1;
var maxRange = DatenENDE.editContents-1;
if ((maxRange-startVal) == 0) {
alert ("von- und bis-Wert sind gleich.", "Stop");
okay = false;
}
else if ((maxRange-startVal) < 0) {
alert ("Der bis-Wert ist kleiner als der von-Wert.", "Stop");
okay = false;
}
}
myDialog.destroy();
if (okay == false) {
exit();
}
}
else {
myDialog.destroy();
exit();
}
}

Die Variable 'okay' dient als "flag". Wenn ihr Wert 'false' ist, wird die Ausführung nach dem Entfernen des Dialoges abgebrochen.

Gruss, Hans


als Antwort auf: [#530001]

INDesign Script für Datenzusammenführung

OnkelAndi
Beiträge gesamt: 4

21. Jul 2014, 14:16
Beitrag # 11 von 13
Beitrag ID: #530010
Bewertung:
(7154 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

danke für die weiteren Anregungen.
integer auf die Zahlenfelder anzuwenden macht in dem fall sinn.
den maximum Eintrag würde ich mal außenvor lassen, da die Anzahl der Datensätze offen ist. Zudem bin ich bisher der einzigste, der mit dem script arbeitet und somit weiß, was im hintergrund läuft.

den alert von gleichen werten benötigt es eigentlich nur, wenn man "var maxRange = DatenENDE.editContents-1" anstatt *1 nimmt. Da aber -1 für die Überschriftenzeile abgezogen wird, wende ich dies nur für den start an, dann passt es.
Und für das ende der datensätze eine niedrigere zahl einzugeben wäre ja auch unsinnig.

Ich Danke dir für deine Zeit und deine Vorschläge.

Viele Grüße,
Andi


als Antwort auf: [#530005]

INDesign Script für Datenzusammenführung

Hans Haesler
  
Beiträge gesamt: 5606

21. Jul 2014, 14:45
Beitrag # 12 von 13
Beitrag ID: #530017
Bewertung:
(7137 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andi,

bitte sehr.

Nun, auch wenn man weiss was man macht :-), ist eine Prüfung der Werte
angebracht. Denn unsinnige Eingaben sind meistens Tippfehler.

Gruss, Hans


als Antwort auf: [#530010]

INDesign Script für Datenzusammenführung

NEU!
Beiträge gesamt: 174

12. Jun 2018, 11:47
Beitrag # 13 von 13
Beitrag ID: #564318
Bewertung:
(609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier auch nochmal: Cole can do! Super hilfreich:

https://colecandoo.com/2015/09/04/data-merge-from-indesign-to-unique-filenames-now-a-reality/


als Antwort auf: [#530017]
X

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
26.09.2018

Hochschuloe der Medien, Stuttgart
Mittwoch, 26. Sept. 2018, 19.00 - 21.00 Uhr

Vertrag

Nur auf den ersten Blick scheint dieses Thema exotisch. Aber eine neue EU-Richtlinie und deren Auswirkungen auf deutsche Gesetze werden dieses Thema auch für Publisher interessant machen. Die EU-Richtlinie "2102 zu Barrierefreiheit" besagt folgendes: Ab dem 23. September 2018 müssen alle öffentlichen Stellen ihre neuen (Office- oder PDF-) Dokumente grundsätzlich barrierefrei veröffentlichen. Im Juni wurde der Gesetzentwurf zur Umsetzung dieser Richtlinie im deutschen Bundestag vom "Ausschuss für Arbeit und Soziales" (19/2728) angenommen. Es wird also ernst für "öffentliche Stellen" und damit auch für deren Dienstleister, die mit der Umsetzung beauftragt werden. Die Richtlinie gilt nämlich nicht nur für Bundes- und Landesbehörden, sondern auch für Verbände, die im Allgemeininteresse liegende Aufgaben erfüllen. Das wären somit auch Gerichte, Polizeistellen, Krankenhäuser, Universitäten, Bibliotheken und einige mehr. Weitere Informationen findest Du hier, hier und hier. Wenn also oben genannte Auftraggeber zu Deinen Kunden zählen, solltest Du Dich vorbereiten. Und da es neben Websites auch um alle downloadbaren Dateien geht sind eben auch PDFs zukünftig barrierefrei zu erstellen. Arbeitet man in InDesign, können dort einige Vorbereitungen getroffen werden. Klaas Posselt ist der ausgewiesene Spezialist im deutschsprachigen Raum für alle Fragen rund um das Thema. Deshalb freuen wir uns, dass er uns in einem Vortrag die Grundlagen dazu vermitteln wird. Wir setzen voraus, dass Du den Umgang mit InDesign gewohnt bist, die Gründe und Vorteile von der Nutzung von Formaten kennst und weißt, wie man lange Dokumente „richtig“ aufbaut. Der Vortrag setzt bewusst DANACH ein. Inhalt des Vortrages ist der Hintergrund von „Barrierefreiheit“ und Möglichkeiten und Grenzen innerhalb von InDesign. Es wird erklärt, welche Bedeutung das kostenpflichtige PlugIn MadeToTag hat und warum und für was man es braucht. Ziel ist es den Rahmen aufzuzeigen, in dem sich das Thema „Barrierefreiheit“ in InDesign abspielt. Du weißt hinterher, wo die „Baustellen“ sind, wo Du weitergehende Infos bekommst und welchen Weg Du einschlagen musst. Am nächsten Tag veranstalten wir zwei Bootcamps, die das Thema praktisch vertiefen. "IDUGS Bootcamp #2" und "IDUGS Bootcamp #3" Klaas Posselt ist studierter Dipl.-Ing. für Druck- und Medientechnik und kam über verschiedene Anfragen zum Thema barrierefreie PDF Dokumente. Seit über 10 Jahren arbeitet er in den Bereichen Medientechnik und Publishing zwischen Medienherstellern, Druckermaschinen und digitalen Ausgabekanälen. Er schult, begleitet und unterstützt Kunden bei der Einführung und Optimierung von Publikationsprozessen und auf dem Weg zu neuen digitalen Ausgabekanälen — egal ob E-Books, barrierefreie PDFs oder Webplattformen. Als Chairman des PDF/UA Competence Center der PDF Association beteiligt er sich an der Weiterentwicklung und Verbreitung des Standards PDF/UA für barrierefreie PDF Dokumente. Diese Veranstaltung kommt nur zu Stande durch die freundliche Unterstützung von "Six Offene Systeme GmbH" -- Enterprise-Content-Management-System und Media-Asset-Management-System.

Nein

Organisator: IDUG Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailchristoph.steffens AT gmail DOT com

https://idug47.eventbrite.de

Veranstaltungen
27.09.2018

Screen IT, Uster
Donnerstag, 27. Sept. 2018, 17.30 - 20.00 Uhr

Infoveranstaltung

Das Angebot an Publishing-Software ist gross. Deshalb empfiehlt sich eine externe Beratung durch unabhängige Software-Experten aus der jeweiligen Branche. Nicht immer muss es eine teure Mietlösung sein, die nach Beendigung der Mietdauer einem nicht einmal gehört. Es gibt sehr gute und auch in der Qualität ausreichende Alternativen, ja sogar kostenlose Freeware. Lassen Sie sich an diesem Abend einmal vor Augen führen, was diese Programme können und wie viel sie kosten.

Ja

Organisator: Screen IT und pre2media

Kontaktinformation: Peter Jäger, E-Mailinfo AT pre2media DOT ch

https://www.pre2media.ch/-1/de/infoanlass/