Acerca del script: A continuación se presenta un script simple que escala una tabla proporcionalmente para que se ajuste a la columna de texto que la contiene. Este script funciona con la tabla actual, pero se puede ampliar fácilmente para trabajar con todas las tablas de un documento o libro.
Obtención de los datos: Haga clic con el cursor en una tabla que necesite ser escalada. Deberá recopilar información básica para escalar la tabla correctamente. A continuación se muestra código comentado para establecer los datos necesarios en variables.
// The selected table.
Set vTbl = SelectedTbl;
// The current width of the table.
Set vTblWidth = vTbl.TblWidth;
// The width of the column containing the table.
Set vColWidth = vTbl.TextLoc.Object.InTextObj.Width;
La variable vColWidth es el ancho de la columna en un marco de texto multicolumna. Si el marco de texto solo tiene una columna, el ancho de la columna es igual al ancho del marco de texto. Si tiene varias columnas, pero desea escalar la tabla al ancho del marco de texto, utilice las siguientes líneas en lugar de las dos últimas líneas anteriores.
// The width of the text frame containing the table.
Set vColWidth = vTbl.TextLoc.Object.InTextFrame.Width;
Ahora, el script puede realizar cálculos para determinar cuánto escalar la tabla.
// Divide the column width by the table width.
Set vScaleFactor = vColWidth / vTblWidth;
¿Cómo escalar la tabla?
La propiedad TblWidth de la tabla es de solo lectura, por lo que no puede utilizarla para escalar la tabla.
// This won't work.
Set vTbl.TblWidth = vTblWidth * vScaleFactor;
En su lugar, debe cambiar el ancho de cada columna individual de la tabla. Estos anchos se almacenan en una lista métrica denominada TblColWidths.
// Set a variable for the table column widths.
Set vWidths = vTbl.TblColWidths;
Una lista métrica es una lista de valores de medición. En este caso, hay un miembro de la lista para cada columna de la tabla. Si la tabla tiene cinco columnas, la lista TblColWidth contendrá cinco miembros.
La clave del script es recorrer la lista de mediciones, multiplicar cada una por vScaleFactor e insertar el nuevo valor nuevamente en la lista.
// Loop through the list and calculate each
// table column's new width.
Loop While(vCounter <= vWidths.Count) LoopVar(vCounter)
Init(1) Incr(1)
Get Member Number(vCounter) From(vWidths) NewVar(vWidth);
Set vNewWidth = vWidth * vScaleFactor;
Replace Member Number(vCounter) In(vWidths) With(vNewWidth);
EndLoop
La variable vCounter se incrementará en 1 (Incr(1)) comenzando desde 1 (Init(1)) hasta el número de miembros en vWidths (vWidths.Count). Cada miembro se multiplicará por el factor de escala y se reemplazará con el nuevo valor.
Su variable MetricList vWidths ahora contiene los anchos correctos para escalar la tabla al ancho de la columna. Lo único que queda por hacer es asignar los nuevos valores a la tabla.
Set vTbl.TblColWidths = vWidths;