hilfdirselbst.ch
Facebook Twitter gamper-media
TomWTeam
Beiträge: 2
2. Mai 2018, 08:33
Beitrag #1 von 2
Bewertung:
(106 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

INDesign Script für Datenzusammenführung


Morgen,

bin bei euch in Forum auf ein Script gestossen, dass genau meinen Anforderungen entsprechen würde - nur funktioniert es nicht ganz ...

Ein Script, dass Daten aus einer CSV-Datei auslest und diese dann beim Vergeben des Dateinamen wieder einsetzt.

https://www.hilfdirselbst.ch/foren/Datenzusammenf%FChrung_mit_individuellen_Dateinamen_P552784.html#552784

Das Script läuft, allerdings wird immer nur EIN EINZIGER Datensatz gespeichert und in ein PDF exportiert - liegt das an der neuesten InDesign Version?

Wäre euch für Anregungen, Denkanstöße oder jedwede Hilfe dankbar!

Hier noch der Code von Morris10201
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

// Dialogboxen für Speicherort und Herkunft der csv-Datei
var destFolderPath = Folder.selectDialog('Zielordner für alle Dateien wählen').absoluteURI + '/' ;
var csvFile = File.openDialog('csv-Datei mit den Daten wählen');

// Vorgabewerte
defaultPdfProfile = 1; // PDF-Vorgabe (Name oder Nummer)
defaultSaveToDesktop = false; // PDF immer auf Schreibtisch exportieren (nur Mac)
defaultCloseAfterExporting = false; // Dokumente nach dem Exportieren schließen
defaultSuffix = ""; // Text, welcher zum Dateinamen hinzugefügt werden soll (### = PDF-Vorgabename)
$.localize = true;

// Sprachstrings
msgCancel = {de:"Abbrechen", en:"Cancel" };
msgOk = {de:"Exportieren", en:"export"};
msgNoOpenDocs = {en:"No open documents!", de: "Es gibt keine offenen Dokumente!"};
msgTitle = {en:"Save and Export all open documents as PDF", de:"Geöffnete Dokumente sichern und als PDF exportieren"};
msgIntro = {en:"PDF export profile:", de:"PDF-Export-Vorgabe:"};
msgNoPreset = {en:"No export preset selected!", de:"Keine PDF-Export-Vorgabe ausgewählt"};
msgSuffix = {en:"filename suffix:", de:"Zum Dateinamen hinzufügen:" } ;
msgSuffixVar = {en:"%PROFILE%", de:"%EXPORTVORGABE%"};
msgSaveToDesktop = {en:"Export to desktop", de:"Auf Schreibtisch exportieren"};
msgCloseDocs = {en:"Close documents after exporting", de:"Dokumente nach dem Exportieren schließen"};
msgFinished = {en:"%1 of %2 documents have been exported successfully.", de:"%1 von %2 Dokumenten wurden erfolgreich exportiert."};
msgFinishedError = {en:"%1 of %2 documents have been exported.\nFollowing documents couldn't be exported:", de:"%1 von %2 Dokumenten wurden exportiert.\nDie folgenden Dokumente konnten nicht exportiert werden:"};
msgExportError = {en:" (export error)", de:" (Fehler beim Exportieren)"};
msgSaveError = {en:" (save error)", de:" (Fehler beim Sichern)"};

// Wenn kein Dokument offen, dann Beenden
if (app.documents.length<1) { alert(msgNoOpenDocs); exit(); }

// Dialogfenster erstellen
var dlg = new Window('dialog', localize(msgTitle) );

dlg.profile = dlg.add('group', undefined, {orientation:'row'});
dlg.profile.add('statictext', undefined, localize(msgIntro) );
dlg.theList = dlg.profile.add('dropdownlist', undefined);
for(var onePreset = 0; onePreset < app.pdfExportPresets.length; onePreset++){
dlg.theList.add('item',app.pdfExportPresets.item(onePreset).name,onePreset);
if (app.pdfExportPresets.item(onePreset).name == defaultPdfProfile) {
dlg.theList.selection = onePreset;
} else if (onePreset == defaultPdfProfile-1) {
dlg.theList.selection = onePreset;
}
}
if (!dlg.theList.selection) { dlg.theList.selection = 0; }

dlg.edit = dlg.add('group', undefined, {orientation:'row'} );
dlg.edit.add('statictext', undefined, localize(msgSuffix) );
dlg.suffix = dlg.edit.add('edittext', undefined, defaultSuffix, {name:'suffix'} );
dlg.suffix.characters = 20;
dlg.options = dlg.add('group', undefined, {orientation:'row'} );
dlg.savetodesktop = dlg.options.add('checkbox', undefined, localize(msgSaveToDesktop));
dlg.savetodesktop.value = defaultSaveToDesktop;
if (!($.os.indexOf("Mac")>-1)) {
dlg.savetodesktop.enabled = false;
dlg.savetodesktop.value = false;
}
dlg.closedocs = dlg.options.add('checkbox', undefined, localize(msgCloseDocs));
dlg.closedocs.value = defaultCloseAfterExporting;
dlg.buttons = dlg.add('group',undefined,{orientation:'row'});
dlg.buttons.add('button', undefined, localize(msgCancel), {name:'cancel'});
dlg.buttons.add('button', undefined, localize(msgOk), {name:'ok'} );

// Welcher Knopf wurde gedrückt
result = dlg.show();

// Wenn nicht auf Exportieren geklickt wurde, Skript beenden
if (result != 1) { exit(); }

suffix = dlg.suffix.text;
myPreset = dlg.theList.selection;

// Keine PDF-Vorgabe ausgewählt
if (!myPreset) { alert(msgNoPreset); exit();}

// Platzhalter ### im Suffix durch PDF-Vorgabe ersetzen
suffix = suffix.replace ("###", myCleanFileName(myPreset));

// Initialisierung
var myDocs = app.documents;
var maxDocs = myDocs.length;
var exportedDocs = 0;
var errors = "";
var myCounter = 0;

// Fenster mit Fortschrittbalken anzeigen
var progress = new Window('palette', localize(msgTitle) );
progress.bar = progress.add('progressbar');
progress.file = progress.add('statictext');
progress.file.size = [500,15];
progress.bar.size = [500,15];
progress.bar.maxvalue = maxDocs*2;
progress.show();

//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'));
// Alle offenen Dokumente verarbeiten
for( oneDoc = 0 ; oneDoc < myDocs.length ; oneDoc++ ){
myCounter++;
myFile = myDocs[oneDoc];
progress.file.text = myCounter+"/"+maxDocs+": "+myFile.name;
progress.bar.value= myCounter*2-1;
myFile.save();
progress.bar.value= myCounter*2-0.01;
if (myFile.saved) {
// Entscheiden, ob auf Schreibtisch oder im Dokumentordner exportiert wird
if (dlg.savetodesktop.value) {
var path = '~/Desktop';
} else {
var path = myFile.filePath;
}
// Dateiname setzen
var pdfFile = new File( path +'/' + cutFileName(myFile.name ) + suffix + '.pdf' )
try{
// PDF exportieren
myFile.exportFile(ExportFormat.pdfType, pdfFile, false, myPreset.toString() );
exportedDocs++;
}
catch(e){
errors = errors + "\n" + myFile.name + localize(msgExportError);
};
} else {
errors = errors + "\n" + myFile.name + localize(msgSaveError);
}

if (dlg.closedocs.value) { myFile.close(); oneDoc--;}
}
progress.bar.value= maxDocs*2;
app.activeDocument.close();
}



if (errors == "") {
alert(localize(msgFinished,exportedDocs,maxDocs));
} else {
alert(localize(msgFinishedError,exportedDocs,maxDocs)+errors);
}
exit();

// Funktion zum Abtrennen der Dateiendung
function cutFileName (oneFile) {
return oneFile.toString().substring (0, oneFile.length-5)
}


// Funktion zum Ersetzen von (hinsichtlich des Dateisystems) problematischen
// Zeichen im Namen eines Vorgabesets (Slash, Backslash, Doppelpunkt)
function myCleanFileName(oneFilename) {
var oneFilename = String(oneFilename.toString().split('/').join('_').split('\\').join('_').split(':').join('¯'));
return oneFilename;
}

Top
 
X
TomWTeam
Beiträge: 2
2. Mai 2018, 11:47
Beitrag #2 von 2
Beitrag ID: #563693
Bewertung:
(84 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

INDesign Script für Datenzusammenführung


Hat sich erledigt, offenbar wählt Indesign standardmäßig nur einen Datensatz bei der Zusammenführung aus. Durch Einbau des EINGABE-Dialoges von Onkel Andi/Hans Haesler unter
https://www.hilfdirselbst.ch/...fchrung_P513807.html
kann man die Datensätze, die man benötigt angeben, dann funktioniert alles einwandfrei.
als Antwort auf: [#563687] Top