hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
Anonym
Beiträge: 22827
22. Mai 2003, 21:53
Beitrag #1 von 2
Bewertung:
(637 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

InDesign - auf welcher Seite befindet sich die Tabellenzelle


Hi Hans,

vielen Dank für dein Angebot. Ich nehme es natürlich dankend an.

Das Problem ist wie folgt: Ich habe eine Messekatalog-Datenbank mit vielen Adressen, die ich in eine Tabelle einfließen lasse und dementsprechend formatiere. Alles mit einem Fließtext über viele Seiten laufend. Das funktioniert auch alles einwandfrei. Jetzt möchte ich aber noch nach Warengruppen publizieren und einen Überbegriff (die jeweilige Warengruppe) setzen, die dann die gewünschten Adressen beeinhaltet. Das funktioniert auch alles einwandfrei, jedoch hab ich das Problem, das ich nicht prüfen kann, ob sich der Überbegriff und die darauffolgende Adresse auf der gleichen Seite befindet. Ich will ausschließen, das die Warengruppe auf der einen Seite steht und die Adresse auf der anderen.
Wenn ich mir die Referenz zur Zelle, Spalte oder Tabelle geben lasse, erhalte ich immer den Anfangspunkt. d.h. immer Seite 1. Die Zelle befindet sich aber auf Seite 37. Somit kann ich nicht prüfen wo sich diese Zellen befinden. Ich wollte dann jeweils eine neue Tabelle für jede Warengruppe beginnen, aber habe ja dann wieder das gleiche Problem. Ich hab noch überlegt, für den Überbegriff und die folgenden Adressen jeweils eine eigene Tabelle zu setzen und dann die Tabellen-Seiten abzufragen. Das wäre eine Möglichkeit, aber nicht wünschenswert. Ich dachte auch an eine Option, den Überbegriff auf der nächsten Seite nochmals anzeigen zu lassen, aber das ist ja noch problematischer, da ich einen Tabellen-Fleckenteppich bekomme. Ich habe so um die 200 Warengruppen, die dann "n" Adressen beinhalten.

Vielleicht hast Du ja einen Ansatz, der mein Problem löst. Wie sieht es da eigentlich mit Quark 5.01 aus? Welche Infos bekommt man da? Kann man da die tatsächliche Seite auslesen?

Ole hat mir bestätigt, das die Zellenposition nicht abgefragt werden kann, da immer die Startposition zurückgegeben wird. Er hat mir eben geraten, das VB-Script in meine Lösung einzubauen, aber leider weiß ich nicht, was darin enthalten sein könnte.

happy filemaking


Armin Top
 
X
Hans Haesler  M  p
Beiträge: 5453
26. Mai 2003, 15:24
Beitrag #2 von 2
Beitrag ID: #418159
Bewertung:
(636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

InDesign - auf welcher Seite befindet sich die Tabellenzelle


Hi Armin,

also... ich kenne mich überhaupt nicht mit Visual Basic aus. Trotzdem studierte ich Uncle Ole's Code
und kann nun sagen, dass er Dir nicht viel nützen wird. Hier in groben Zügen, was er enthält:

Zuerst wird eine Referenz zu einer Musterzelle geholt, dann wird ein Suchstring bestimmt: "!!". Dieser
Suchstring wird in die Musterzelle eingesetzt. Anschliessend wird der Handler zum Suchen dieses Strings
aufgerufen. Mit einer Repeat-Schleife wird jede Seite abgefragt, der Textrahmen (Ole's Script sieht mehrere
Textrahmen pro Seite vor) der aktuellen Seite wird dupliziert, damit darin nach dem String gesucht werden
kann. Wenn in einem Rahmen nichts gefunden wird, dann wird der Rahmen wieder gelöscht und zur nächsten Seite
übergegangen. Sobald der String gefunden ist, weiss man auch auf welcher Seite sich die Zelle befindet.

Schön und gut aber äusserst schwerfällig. Zudem gibt es zwei Probleme. Erstens kann man so einen Überbegriff,
welcher unten auf der Seite steht, nicht finden. Und zweitens ist das Resultat mit dem 'search'-Befehl immer
dasselbe. Egal, ob der verkettete Textrahmen adressiert wird oder dessen temporäres Duplikat.

Der Suchbefehl (in einer Repeatschleife, werden die Seiten natürlich mit einer Zählervariablen adressiert):
---
tell document 1 of application "InDesign 2.0.2"
  search for "!!" in text 1 of text frame 1 of page 1
end tell
---

Ich habe versucht, das Problem anders anzupacken: Mit einer Repeat-Schleife werden alle Reihen abgefragt.
Dabei wird der vertikale Wert der Grundline des Textes der Zelle 2 der aktuellen Reihe in eine Variable
gesetzt. Dieser Wert mit jenem der vorhergehenden Zelle verglichen:
---
set p to 0
set prevVal to 0
tell document 1 of application "InDesign 2.0.2"
  activate
  tell page 1
    tell text frame 1
      tell table 1
        repeat with i from 1 to count rows
          tell row i
            try
              tell cell 2
                tell text 1
                  set actVal to baseline of line 1
                  if (prevVal - actVal) > 100 then
                    set p to p + 1
                    set okay to my getPointSize(i)
                    if okay = 1 then my modHeight(p, prevVal)
                  end if
                end tell
              end tell
            end try
          end tell
          set prevVal to actVal
        end repeat
      end tell
    end tell
  end tell
  display dialog "Fertig." buttons "OK" default button 1 with icon 1
end tell
---
Der aktuelle Wert wird bei jedem Umgang der Variablen 'prevVal' übergeben. Wenn das Resultat von 'prevVal
minus actVal' grösser als 100 ist, dann bedeutet dies, dass die Zelle auf einer neuen Seite steht. Der Zähler
'p' wird um eins erhöht. Im Handler 'getPointSize()' wird festgestellt, ob der Schriftgrad der vorhergehenden
Zelle 15 pt beträgt. Ist dies der Fall, dann wird der Wert '1' zurückgegeben und mit dem Handler 'modHeight()'
die Höhe des Textframes gekürzt: auf die Position der Grundlinie des Überbegriffs minus 3 mm, damit dieser auf
die nächste Seite verschoben wird.

Ich werde Dir das ganze Script zusenden. Dann hoffe ich, dass es sich auch im Echt-Einsatz so gut bewährt,
wie hier mit einem kleinen Testdokument.

Hans Haesler, hsa@ringier.ch
als Antwort auf: [#418158] Top