El tamaño de la forma no es igual al tamaño de celda de la tabla y se ajusta al texto dentro de la forma

Aug 15 2020

Intentando insertar una forma igual al tamaño de celda de la tabla.

Creé la forma usando InsertShape()y copié la altura de la fila (posiblemente la altura de la celda), el ancho de la columna (posiblemente el ancho de la celda) a la forma.

Problema:

  1. el tamaño de la forma no es igual al tamaño de la celda en altura y ancho.
  2. El texto dentro de la forma pierde forma, el texto de la forma debe ajustarse automáticamente, mientras que el texto de la celda cabe dentro de la celda.

No puedo decir cómo .getRow().getMinimumHeight()funciona.

La longitud del texto no está fija. Podría ser como un párrafo largo.

Limitación de Google Apps Script:

Celda de tabla: Google Apps Script no puede obtener el ancho y el alto de cada celda

Secuencia de comandos de Google Apps:

let activePresentation = SlidesApp.getActivePresentation()
let selection = activePresentation.getSelection()
let pageElements = selection.getPageElementRange().getPageElements()

//get table Left, table Top of each table under the pageElement object
var tableLeft = pageElements[0].asTable().getLeft(),
    tableTop = pageElements[0].asTable().getTop();

var cellTop = tableTop;       //cell top possible equal to table top   
var cellLeft = tableLeft;    //cell top possible equal to table Left 

//get the row height and column width
var rowHeight = pageElements[0].asTable().getRow(0).getMinimumHeight();
var columnWidth = pageElements[0].asTable().getColumn(0).getWidth();

//get the internal text of cell
var cellText = pageElements[0].asTable().getCell(0, 0).getText().asString()

//insert shape equal to the table cell size
var shape_t = selection.getCurrentPage()
                   .insertShape(SlidesApp.ShapeType.RECTANGLE, 
                                         cellLeft+200, 
                                         cellTop, 
                                         columnWidth, 
                                         rowHeight);

//set the cell text insde the Shape 
shape_t.getText().setText(cellText);

Aquí puedes ver la demo https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit?usp=sharing

Guión completo: https://pastebin.com/CrV3qHwG

Replicar Problema Pegar arriba mencionadohttps://pastebin.com/CrV3qHwGscript en Google Script Editor, agregue una tabla con 1 fila y 1 columna, obviamente será solo una celda. Seleccione la tabla y luego ejecute el script haciendo clic en "Crear forma" en el menú "Probar así".

La imagen muestra el problema y el resultado esperado en vista rápida

Respuestas

3 Tanaike Aug 16 2020 at 06:32

A partir de su información adicional, podría confirmar su situación. Cuando lo vi, pude notar que la tabla tiene una celda y el tamaño de la tabla es el tamaño predeterminado. En este caso, la tabla usa la altura de fila predeterminada de la celda. Y la altura de la celda se establece automáticamente mediante los textos ingresados. Por esto, la altura de la fila es solo una fila que es la altura de 381000 EMU (30 píxeles). Sobre esta situación, confirmé que se obtuvieron los mismos resultados tanto del servicio de Presentaciones como de la API de Presentaciones. Entonces parece que esta es la especificación actual.

Cuando desee recuperar la altura real, en la etapa actual, creo que es necesario establecer la altura de forma manual o mediante un script y recuperar la altura. Por esto, la tabla es la altura real de la fila.

O, aunque esto no es completamente igual con la altura de la fila de la tabla predeterminada, incluidos los textos, creo que la altura de la fila también se puede calcular utilizando los saltos de línea y el tamaño de fuente. En esta respuesta, presento el script de muestra para esto modificando su script.

Modificación de la muestra:

Para dar la altura, como muestra de modificación, me gustaría proponer el siguiente guión. Cuando se modifica su secuencia de comandos, se convierte en lo siguiente.

Desde:
var rowHeight = pageElements[0].asTable().getRow(0).getMinimumHeight();
A:
var t = pageElements[0].asTable().getRow(0).getCell(0).getText();
var rowHeight = (t.asString().split("\n").length - 1) * (t.getTextStyle().getFontSize() / 72 * 96);
  • En esta modificación, la altura de la fila se calcula utilizando los saltos de línea y el tamaño de fuente.
    • t.asString().split("\n").length - 1 es el número de saltos de línea.
    • t.getTextStyle().getFontSize() / 72 * 96es el valor de píxel del tamaño de fuente. Parece que en Google Slides, se usa 96 DPI.
    • Pero, desafortunadamente, en la etapa actual, el resultado no es completamente el mismo con la altura de fila de la tabla predeterminada.
    • En este caso, cuando rowHeightse multiplica por 1.08, se obtiene la misma altura. Pero este factor es infundado. Tenga cuidado con esto.