Hallo,
Ich denke mit Textvariablen zu arbeiten ist hir nicht das was man machen möchte denn du musst die dann ja trotzdem manuell im Dokument “verteilen” und ID hat die nicht gerade die “cleverste UI” a.k.a Menu/Kontextmenü um dir das zu ermöglichen. Ich denke eine Datenzusammenführung a.k.a “Serienbrief”-Funktion wäre hier die bessere Lösung.
Du baust dir ein Template für deine Produkte mit Produktname, Beschreibung, Platzhalter für Bild, Preis, etc., verknüpfst dein Dokument mit der Datenquelle fügst die Felder der Datenquelle in dein Template ein und erzeugst mit der Datenzusammenführung im Modus mehrere Einträge pro Seite deinen Katalog.
Die Textrahmen der Seiten müsstest du allerdings vmtl. selbst verknüpfen selbst wenn die von einem primären Textrahmen der Musterseite stammen sollten das die Datenzusammenführung das glaube ich nicht macht (ist schon einige Jahre her das ich das das letzte mal gemacht habe.
Falls du sowas öfter tun musst und der Katalog jährlich (oder gar öfter) gepflegt werden muss empfehle ich dir aber etwas Geld in ein entsprechendes Plugin zu investieren was dir einiges an Arbeit abnehmen wird und spezielle Aspekte der Katalogerstellung automatisiert wie Produktvarianten, Angebote, Produktgruppen, Filter, Layout Alternativen…
Hab gerade mal nachgeschaut, Easykatalog bietet eine 30-Tage Testversion die voll funktionsfähig ist an. Ich weiss nicht ob die etwas in die ID-Datei einbaut was die quasi Nicht nutzbar macht (Wasserzeichen, Copyright…) aber testen kann man das ja.
Nochmal zurück zu den Textvariablen.
Das kleine Script am Ende konvertiert eine Liste von Preisen in einem Textfeld (kannst du aus deiner Excel-Spalte temporär rein kopieren und anschließend wieder löschen, ein Preis je Absatz, der Einfachheit halber) in eine Anzahl von Textvariablen. Den Namen der Variablen, Tausender- und Dezimaltrenner sowie Währung kannst du am Anfang des Scripts konfigurieren.
Aber wie gesagt bei mehr als 10-20 Preisen würd ich das nicht tuen 😉 - zu viel Handarbeit, zu viel geklicke und nicht wirklich pflegbar.
VG Frank
`
//@target ‘InDesign’;
var varNameBase = “ProductPrice_”;
var varNameStart = 0;
// Only uncomment the one currency label you need before or after
var currencyBefore = “$”;
var currencyAfter = "“; // ”€";
var decimalsSeperator = “.”;
var thousandsSeperator = “,”;
function createTextVar(varName, val) {
var varValue = false;
try var myTV = app.activeDocument.textVariables.add({name: varName, variableType:VariableTypes.CUSTOM_TEXT_TYPE});
catch(e) //;
try myTV.variableOptions.contents = val;
catch(e) //;
}
function padZero(num, len) {
return Array(len + 1 - num.toString().length).join(‘0’) + num;
}
function localizePrice(x) {
return currencyBefore + “ ” + x.toString().replace(“.”, decimalsSeperator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeperator) + “ ” + currencyAfter;
}
if(app.documents.length > 0){
if(app.selection.length > 0){
switch(app.selection[0].constructor.name){
case “TextFrame”:
case “InsertionPoint”:
case “Character”:
case “Word”:
case “Paragraph”:
case “Text”:
importToVar(getStory(app.selection[0]));
break;
default:
alert(“Something was selected, but it wasn’t a text object. Select something else and try again.”);
}
}
else alert(“Nothing was selected, copy your price list into a textframe and try again.”);
}
else alert(“No documents are open. Please open a document and try again.”);
function getStory(obj) {
if (obj.parentStory) return obj.parentStory;
else if (obj.parent) return getStory(obj.parent);
else return false;
}
function importToVar(obj) {
if (obj !== false) {
var pc = obj.paragraphs.count();
for ( var p = 0; p < pc; p++ ) {
createTextVar(varNameBase + padZero(varNameStart + p, pc.toString().length), localizePrice(parseFloat(obj.paragraphs.itemByRange(p,p).contents).toFixed(2)));
}
}
}
`