[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:
(13047 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 ... ^^
X

INDesign Script für Datenzusammenführung

WernerPerplies
Beiträge gesamt: 2687

12. Jun 2013, 15:11
Beitrag # 2 von 13
Beitrag ID: #513776
Bewertung:
(13030 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 Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#513775]

INDesign Script für Datenzusammenführung

-hans-
Beiträge gesamt: 748

12. Jun 2013, 18:25
Beitrag # 3 von 13
Beitrag ID: #513791
Bewertung: ||
(12977 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:
(12919 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: 748

13. Jun 2013, 11:08
Beitrag # 5 von 13
Beitrag ID: #513807
Bewertung:
(12869 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:
(11686 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:
(11645 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: 5816

21. Jul 2014, 08:24
Beitrag # 8 von 13
Beitrag ID: #529982
Bewertung:
(11568 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:
(11523 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: 5816

21. Jul 2014, 13:22
Beitrag # 10 von 13
Beitrag ID: #530005
Bewertung:
(11489 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:
(11466 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: 5816

21. Jul 2014, 14:45
Beitrag # 12 von 13
Beitrag ID: #530017
Bewertung:
(11449 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: 179

12. Jun 2018, 11:47
Beitrag # 13 von 13
Beitrag ID: #564318
Bewertung:
(4923 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

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
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/