[GastForen Programmierung/Entwicklung AppleScript Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

KingLoeffel
Beiträge gesamt: 20

1. Aug 2012, 08:37
Beitrag # 1 von 14
Bewertung:
(5896 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen.

Bin Applescript-Neueinsteiger und jetzt natürlich sofort schrecklich überfordert mit meiner Problemstellung ; )

Wäre nett, wenn mir jemand hfelfen könnte.
Ich habe eine Linie, der ich auch schon ein Label namens "Linie" zugeordnet habe. Diese Linie soll nun mehrfach dupliziert und horizontal versetzt wieder eingefügt werden ... und zwar jeweils um einen Wert, der aus einer Excel-Tabelle ausgelesen wird.
Beispiel: in der Exceltabelle Stehen in den Zellen
A1 bis A3 die Werte 17, 5 und 12.
Ich möchte jetzt, dass meine gelabelte InDesign-Linie (von dort, wo sie sich zZ befindet) zuerst um 17 mm nach rechts dupliziert werden, dann dieses Duplikat um weitere 5mm, und jenes dann wieder um 12mm.
Ist das irgendwie machbar?
Vielen Dank im Voraus. Hoffe, dass es für die Profis hier nicht so aufwendig ist, wie es mir jetzt gerade vorkommt ; )
X

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

Hans Haesler
  
Beiträge gesamt: 5826

1. Aug 2012, 08:59
Beitrag # 2 von 14
Beitrag ID: #498833
Bewertung:
(5875 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo KingLoeffel,

herzlich willkommen im AppleScript-Forum auf HilfDirSelbst! :-)

Deine Aufgabe ist sicher lösbar. Aber leider muss ich gleich weg (heute ist unser Nationalfeiertag) und deshalb kann ich Dir erst abends wieder behilflich sein.

Doch vielleicht kann ein Mitleser einspringen. Dieser sollte aber auch wissen, welche Excel-Version Du benutzest und unter welchem Mac OS X.

Gruss, Hans


als Antwort auf: [#498832]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

KingLoeffel
Beiträge gesamt: 20

1. Aug 2012, 09:19
Beitrag # 3 von 14
Beitrag ID: #498834
Bewertung:
(5863 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
danke schonmal : )

Das wäre Excel:mac 2011 (Version 14.1.0)
Betriebssystem: Schneeleopard 10.6.8


als Antwort auf: [#498833]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

-hans-
Beiträge gesamt: 748

1. Aug 2012, 15:33
Beitrag # 4 von 14
Beitrag ID: #498846
Bewertung:
(5792 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

wie geschieht denn die Zuordnung "Zellen zu Linie"? Ist das jeweilige Label auch in der Exceldatei hinterlegt? Ich nehme mal an in der Exceldatei sind viele Werte für viele Linien definiert? Einfacher und schneller als mit einer offenen Excel-Datei ließe sich mit einer *.csv-Datei arbeiten ...


als Antwort auf: [#498834]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

Hans Haesler
  
Beiträge gesamt: 5826

1. Aug 2012, 21:34
Beitrag # 5 von 14
Beitrag ID: #498858
Bewertung:
(5762 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo KingLoeffel,

hier eine erste Version des Scripts. Normalerweise sollte man mit ein paar Tests feststellen, ob alles bereit ist (läuft Excel? Ist ein Dokument offen? Sind von A1 bis A3 Zahlen eingetragen? Ist das InDesign-Dokument offen? Enthält es den Linienrahmen "Linie"?).

Aber damit es übersichtlicher ist, wird zunächst angenommen, dass der Anwender weiss, was er macht.

Code
tell application "Microsoft Excel" 
try
tell workbook 1
tell sheet 1
-- die Werte in eine temporäre Liste setzen
set tmpList to (value of range "A1:A3")
end tell
end tell
end try
end tell
-- die endgültige Liste initialisieren
set valList to {}
-- eine Schleife durch die Liste ...
repeat with i from 1 to count of tmpList
-- ... und die Werte als Bruchzahlen an die endgültige Liste hängen
set end of valList to item i of tmpList as real
end repeat

tell application "Adobe InDesign CS4"
activate
tell document 1
-- das Objekt duplizieren ...
set newLine to duplicate graphic line "Linie"
-- ... und um den ersten Wert verschieben
move newLine by [item 1 of valList, 0] -- = [x, y]
-- eine Schleife durch die Liste, ab Element 2
repeat with i from 2 to count of valList
-- das neue Objekt duplizieren ...
set newLine to duplicate newLine
-- ... und um den aktuellen Wert verschieben
move newLine by [item i of valList, 0]
end repeat
end tell
end tell

Getestet mit CS5 (weil CS4 unter Tiger läuft und auf jener Partition kein Excel vorhanden ist).

Gruss, Hans


als Antwort auf: [#498834]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

KingLoeffel
Beiträge gesamt: 20

1. Aug 2012, 22:46
Beitrag # 6 von 14
Beitrag ID: #498861
Bewertung:
(5741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen lieben Dank schon mal. Ich werde es morgen Vormittag direkt ausprobieren und Bericht erstatten, ob es geklappt hat! : )

(Kannst Du zufällig irgendein Buch empfehlen, mit dem man sich derartige Sachen autodidaktisch beibringen kann?)


als Antwort auf: [#498858]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

Hans Haesler
  
Beiträge gesamt: 5826

1. Aug 2012, 23:16
Beitrag # 7 von 14
Beitrag ID: #498863
Bewertung:
(5733 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo KingLoeffel,

bitteschön.

Irgendein Buch empfehlen? Auf dieser Seite sind ein paar aufgeführt:
http://www.fischer-bayern.de/...ript/html/books.html

Alte (und noch ältere). Zum Teil nicht mehr erhältliche.
Doch für den Anfang ist das erste (von Bert Altenburg) sicher geeignet.

Gruss, Hans


als Antwort auf: [#498861]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

KingLoeffel
Beiträge gesamt: 20

2. Aug 2012, 10:05
Beitrag # 8 von 14
Beitrag ID: #498872
Bewertung:
(5671 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hat super funktioniert, danke : )

Habe es sogar fertiggebracht, noch eine eigene Abfrage einzubauen, mit welcher man die Tabelle auswählen kann ; )

Jetzt sind allerdings noch ein paar andere Problemchen aufgetaucht – wie zB, dass die Anzahl der Excel-Werte variieren kann und ich eigentlich noch ne Abfrage einbauen müsste, in welcher der Nutzer die Zellen definieren kann. *seufz*

Danke für den Buchtipp, ich schaue mal ...
Habe mir vor ein paar Wochen das dicke Applescript 1-2-3 gekauft, aber mit dem bin ich noch nicht wirklich warm geworden ; )


als Antwort auf: [#498863]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

Hans Haesler
  
Beiträge gesamt: 5826

2. Aug 2012, 11:33
Beitrag # 9 von 14
Beitrag ID: #498880
Bewertung:
(5655 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo KingLoeffel,

Zitat Habe es sogar fertiggebracht, noch eine eigene Abfrage einzubauen, mit welcher man die Tabelle auswählen kann ; )

Super! Daran erkannt man Dein Talent zum AppleScripten.

Eine Abfrage könnte so funktionieren: Einen Dialog zeigen, in welchem im Textfeld ein Beispiel steht, welches der Anwender ändern kann. Seine Eingabe wird der Variablen 'usedRange' zugewiesen, welche dann im Excel-Code anstelle des fix eingesetzten Bereichs verwendet wird.

Code
set usedRange to text returned of (display dialog "Bereich der Excel-Zellen:" default answer "A1:A3") 

tell application "Microsoft Excel"
try
tell workbook 1
tell sheet 1
-- die Werte in eine temporäre Liste setzen
set tmpList to (value of range usedRange)
end tell
end tell
end try
end tell

Die Abfrage könnte aber auch entfallen, indem in der Excel-Zeile die Werte direkt aus der 'used range' geholt werden:

Code
tell application "Microsoft Excel" 
try
tell workbook 1
tell sheet 1
-- die Werte in eine temporäre Liste setzen
set tmpList to value of used range
end tell
end tell
end try
end tell

Gruss, Hans


als Antwort auf: [#498872]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

KingLoeffel
Beiträge gesamt: 20

8. Aug 2012, 09:12
Beitrag # 10 von 14
Beitrag ID: #499074
Bewertung:
(5526 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super, funktioniert : )
Mit der Used Range macht hier leider keinen Sinn,
weil immer noch irgendwelches anderes Zeug in der Spalte steht, aber wenn man den Bereich selbst definiert ... das klappt hevorragend. Danke nochmals!

Eine Sache hätte ich da noch. Dann lasse ich Dich in Ruhe und vertiefe mich erst mal monatelang ins Selbststudium ; )

Quasi das gleiche Thema, deshalb mache ich jetzt mal keinen neuen Thread auf.
Ich habe in InDesign ein Objekt (eine kleine Gruppe aus Kreis, Zahl und Linie), welches ich mit "OrtA" label und welches sich an einer beliebigen Position befinden kann.
Diese Position möchte ich nun auslesen, damit ich weitere Objekte (OrtB, OrtC ...) wieder um einen Excelwert horizontal versetzt platzieren kann.

Beispiel:
OrtA befindet sich im Dokument bei x=5mm y=10mm.

In der Exceltabelle habe ich die Zellen
B1 7
B2 12

OrtB soll sich jetzt um 7 mm rechts neben OrtA befinden.
OrtC soll sich 12 mm rechts neben OrtB befinden.

Ich hoffe, ich konnte mich verständlich ausdrücken ; )


als Antwort auf: [#498880]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

Hans Haesler
  
Beiträge gesamt: 5826

8. Aug 2012, 10:04
Beitrag # 11 von 14
Beitrag ID: #499082
Bewertung:
(5508 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo KingLoeffel,

bitteschön. Ja, ein sauberes Excel-Dokument sollte es schon sein ...

Zu Deinem neuen Anliegen: Wenn ich es richtig verstehe, dann befinden sich die beiden zu verschiebenden Gruppen schon auf der Seite.

So geht man vor: Die geometric bounds von "OrtA" auslesen. Das sind vier Werte: y1 (Kante oben), x1 (Kante links), y2 (Kante unten), x2 (Kante rechts).

Uns interessiert nur x1 und y1. Die beiden benutzt man zum Verschieben an eine Position = move to (im Gegensatz zum Verschieben um einen Wert = move by).

Code
tell application "Adobe InDesign CS5" 
activate
tell document 1
tell page item "OrtA"
set {y1, x1, y2, x2} to geometric bounds
end tell
set curX to x1 + 7
move page item "OrtB" to [curX, y1]
end tell
end tell

Anstelle der 7 musst Du natürlich die Variable einsetzen (wie beim ersten Problem).
Und wie Du "OrtC" positionierst überlasse ich Dir. :-) Hinweis: curX enthält die aktuelle X-Position von "OrtB".

Gruss, Hans


als Antwort auf: [#499074]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

-hans-
Beiträge gesamt: 748

8. Aug 2012, 10:06
Beitrag # 12 von 14
Beitrag ID: #499084
Bewertung:
(5504 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,

die Eckpunkte eines page items bekommst Du indem Du die geometric bounds abfragst. Die resultierende Liste hat den Aufbau {y1, x1, y2, x2}.
Code
		set myGroup to geometric bounds of group "OrtA" --Resultat: {67.0, 4.0, 145.75, 82.333333333333} 


Zugriff z.B. mit
Code
item 1 of myGroup --> 67.0 


Alle anderen benötigten Scriptschnipsel hast Du ja schon in Hans' Script ...


als Antwort auf: [#499074]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

-hans-
Beiträge gesamt: 748

8. Aug 2012, 10:10
Beitrag # 13 von 14
Beitrag ID: #499085
Bewertung:
(5500 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nimmermüde ;-)


als Antwort auf: [#499082]

Object in InDesign (CS4) um Werte aus Exceltabelle duplizieren

KingLoeffel
Beiträge gesamt: 20

8. Aug 2012, 10:26
Beitrag # 14 von 14
Beitrag ID: #499089
Bewertung:
(5477 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Euch beiden : )
Werde dann im Laufe der nächsten zwei Tage einmal versuchen, die Schnipsel zu einem funktionierenden Gesamtskript zusammenzubasteln. Melde mich dann!


als Antwort auf: [#499085]
X