Tabellen auf Satzspiegel skalieren

(Übersetzung von Scaling Tables to Fit Text Column Width von Rick Quatro)

Das folgende einfache Skript skaliert eine Tabelle proportional zum Satzspiegel des umgebenden Texts. Dieses Skript bezieht sich auf die aktuelle Tabelle, kann aber problemlos so ergänzt werden, dass es für alle Tabellen in einem Dokument oder Buch funktioniert.

Ermitteln der Daten

Klicken Sie in die Tabelle, die Sie skalieren möchten. Sie müssen einige grundlegenden Informationen sammeln, damit Sie die Tabelle korrekt skalieren können. Der folgende Code mit Anmerkungen weist die benötigten Daten Variablen zu.

// Die ausgewählte Tabelle.
Set vTbl = SelectedTbl;
// Die aktuelle Breite der Tabelle.
Set vTblWidth = vTbl.TblWidth;
// Die Breite der Spalte, in der sich die Tabelle befindet.
Set vColWidth = vTbl.TextLoc.Object.InTextObj.Width;

Die Variable vColWidth steht für die Spaltenbreite in einem mehrspaltigen Textrahmen. Wenn der Textrahmen nur aus einer Spalte besteht, entspricht die Spaltenbreite auch der Breite des Textrahmens. Wenn Sie mehrere Spalten haben und die Tabelle auf den Satzspiegel skalieren möchten, verwenden Sie an Stelle der oben genannten Zeilen folgenden Code:

// Die Breite des Textrahmens, in dem sich die Tabelle befindet.
Set vColWidth = vTbl.TextLoc.Object.InTextFrame.Width;

Jetzt führt das Skript einige Berechnungen zum Skalieren der Tabelle durch.

// Dividieren der Spaltenbreite durch die Tabellenbreite.
Set vScaleFactor = vColWidth / vTblWidth;

Zuweisen der Daten

Die Eigenschaft TblWidth der Tabelle ist schreibgeschützt, also können Sie diese Eigenschaft nicht zum Skalieren der Tabelle verwenden.

// Dies funktioniert nicht.
Set vTbl.TblWidth = vTblWidth * vScaleFactor;

Stattdessen müssen Sie die Breite jeder einzelnen Spalte der Tabelle ändern. Diese Breitenwerte werden als Metrikliste in der Eigenschaft TblColWidths gespeichert.

// Setzen der Variablen für die Spaltenbreiten der Tabelle.
Set vWidths = vTbl.TblColWidths;

Eine Metrikliste ist eine Liste von Werten in bestimmten Maßeinheiten. In diesem Beispiel besteht sie aus je einem Element für jede Tabellenspalte. Wenn die Tabelle also aus fünf Spalten besteht, enthält die TblColWidth fünf Elemente.

Das Entscheidende bei diesem Skript ist die Schleife durch die Liste der Werte, die Multiplikation jedes Werts mit vScaleFactor und anschließend den neuen Wert zurück in die Liste zu schreiben.

// Schleife durch die Metrikliste und Berechnung der
// neuen Breite jeder Tabellenspalte.
Loop LoopVar(vCounter) InitVal(1) Incr(1)
    While(vCounter <= vWidths.Count) 
    Get Member Number(vCounter) From(vWidths) NewVar(vWidth);
    Set vNewWidth = vWidth * vScaleFactor;
    Replace Member Number(vCounter) In(vWidths) With(vNewWidth);
EndLoop

Die Variable vCounter erhöht sich für jedes Element in vWidths (vWidths.Count) jeweils um 1 (Incr(1)), beginnend bei 1 (InitVal(1)). Jedes Element wird mit dem Skalierungsfaktor multipliziert und durch den neuen Wert ersetzt.

Ihre Metrikliste vWidths enthält nun die korrekten Breiten für die Skalierung der Tabelle auf den Satzspiegel. Sie müssen der Tabelle lediglich noch die neuen Werte zuweisen.

Set vTbl.TblColWidths = vWidths;

Das komplette Skript können Sie hier auch downloaden.

Februar 2009, Michael Müller-Hillebrand